php模拟提交之fsockopen
<网f站o学a习s制p作.cn>
php模拟提交之fsockopen,对于这种提交还不是很理解.看了一个网友写的关于fsockopen.参考
<?
function socketPost($url, $post_string, $connectTimeout = 30, $readTimeout = 30){
$urlInfo = parse_url($url);
$urlInfo["path"] = ($urlInfo["path"] == "" ? "/" : $urlInfo["path"]);
$urlInfo["port"] = (!isset($urlInfo["port"]) ? 80 : $urlInfo["port"]);
$hostIp = gethostbyname($urlInfo["host"]);
$urlInfo["request"] = $urlInfo["path"] .
(empty($urlInfo["query"]) ? "" : "?" . $urlInfo["query"]) .
(empty($urlInfo["fragment"]) ? "" : "#" . $urlInfo["fragment"]);
$fsock = fsockopen($hostIp, $urlInfo["port"], $errno, $errstr, $connectTimeout);
if (false == $fsock) {
$fp = @fopen('/tmp/error.log',"a+");
fwrite($fp,sprintf("%s\t[%s]\t%s\n",date('Y-m-d H:i:s'),$errno,$errstr ));
return false;
}
/* begin send data */
$in = "POST " . $urlInfo["request"] . " HTTP/1.0\r\n";
$in .= "Accept: */*\r\n";
$in .= "Host: " . $urlInfo["host"] . "\r\n";
$in .= "Content-type: application/x-www-form-urlencoded\r\n";
$in .= "Content-Length: " . strlen($post_string) . "\r\n";
$in .= "Connection: Close\r\n\r\n";
$in .= $post_string . "\r\n\r\n";
stream_set_timeout($fsock, $readTimeout);
if (!fwrite($fsock, $in, strlen($in))) {
fclose($fsock);
return false;
}
unset($in);
//process response
$out = "";
while ($buff = fgets($fsock, 2048)) {
$out .= $buff;
}
//finish socket
fclose($fsock);
$pos = strpos($out, "\r\n\r\n");
$head = substr($out, 0, $pos); //http head
$status = substr($head, 0, strpos($head, "\r\n")); //http status line
$body = substr($out, $pos + 4, strlen($out) - ($pos + 4)); //page body
if (preg_match("/^HTTP\/\d\.\d\s([\d]+)\s.*$/", $status, $matches)) {
if (intval($matches[1]) / 100 == 2) {//return http get body
return $body;
} else {
return false;
}
} else {
return false;
}
}
$result=socketPost("http://xx.xx.com/index.php","clientname=test08&clientpasswd=test08&submit=submit");
echo $result;
?>
原载于:
http://blog.izhoufeng.com/posts/156.html
http://%77%77%77%2E%66网站制作%6F学习网%72%61%73%70%2E%63%6E