[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