[PHP-users 4207] Re: fopen('http:// 〜で POST

Osamu Shigematsu php-users@php.gr.jp
Fri, 07 Dec 2001 16:59:36 +0900


重松です。

> うまくいったら、結果を報告いたします。情報ありがとうございました。

http://www.php.net/manual/ja/ref.curl.php

を良く読んでいたら、getURL() という関数がありました。

私の場合は、i-mode のふりをする必要があり、
いわゆる virtual host だったため、Host: を設定しないと、404 になるので、
以下のようにでっち上げました。
# もう少し美しく汎用性を持たせたい気もするんですけど、今は動けばいいので。

結局 cURL は使わなかった私。。。インストールはしたんですけど。

#!/usr/local/bin/php -q
<?php
// crawler
function getURL($method,$host,$port,$path,$param='',$ua=''){
    // Build the request string
    if(is_array($param)){
        $request = array();
        foreach($param as $key => $val){
            $request[] = $key . "=" . urlencode($val);
        }
        $request = join('&',$request);
    }else{
        $request = $param;
    }
    $request_length = strlen($request);
    
    // Build the header
    switch($method){
        case 'POST':
            $header  = "POST $path HTTP/1.0\r\n";
            $header .= "Host: $host\r\n";
            if($ua) $header .= "User-Agent: $ua\r\n";
            $header .= "Content-type:
application/x-www-form-urlencoded\r\n";
            $header .= "Content-length: $request_length\r\n";
            $header .= "\r\n";
            break;
        case 'GET':
            $header  = "GET $path?$request HTTP/1.0\r\n";
            $header .= "Host: $host\r\n";
            if($ua) $header .= "User-Agent: $ua\r\n";
            $header .= "Content-type:
application/x-www-form-urlencoded\r\n";
            $header .= "Content-length: $request_length\r\n";
            $header .= "\r\n";
            break;
        default:
            $header  = "$method $path HTTP/1.0\r\n";
            $header .= "Host: $host\r\n";
            if($ua) $header .= "User-Agent: $ua\r\n";
            break;
    }
    
    // Open the connection
    $fp = fsockopen($host,$port,&$err_num,&$err_msg,30);
    
    // No Connection Error
    if(!$fp){ 
        die('Sorry, the server is not currently available!');
    } 
    
    // Send everything
    fputs($fp, $header . $request);
    
    // Discard the HTTP header
    while(trim(fgets($fp,4096)) != '');
    
    // Get the response
    while(!feof($fp)){
        $response .= fgets($fp,4096);
    }
    return $response;
}

for($i=0; $i < 100; ++$i){
    echo GetURL(
    'POST',
    'www.foo.com',
    80,
    '/bbs.cgi',
    'id=100',
    'DoCoMo/1.0/P503i');
}

?>

crawler | nkf -e > bbs.log

-- 
Osamu Shigematsu

http://www.ravi.ne.jp/%7eshige/
mailto:shige@ravi.ne.jp