PHP中使用fsockopen的两个HTTP请求

时间:2017-12-30 13:32:51

标签: php cookies fsockopen

我有一个问题,我几乎一周都无法解决。我搜索了所有内容,但无法找到答案。 我需要向服务器做3 x HTTP请求然后接收答案。 首先是获取cookie的GET请求。第二个是使用cookie的POST,第三个是重定向。

$host = "www.xx.com";
$user_agent = "User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:12.0) Gecko/20100101 Firefox/12.0\r\n";
$sock = fsockopen("ssl://$host", 443, $errno, $errstr, 30);
if (!$sock) die("$errstr ($errno)\n");

#########################################
#   GET 
#########################################
$request .= "GET $path HTTP/1.1\r\n";
$request .= "Accept: */*\r\n";
$request .= "Host: $host\r\n";
$request .= $user_agent;
$request .= "Connection: close\r\n";
$request .= "\r\n";
fwrite($sock, $request);

$http_response = stream_get_contents($sock);
list($headers, $body) = explode("\r\n\r\n", $http_response, 2);

// get cookie
preg_match_all('/Set-Cookie:\s*(.*)\b/', $headers, $cookie_res);
foreach($cookie_res[1] as &$val){
    $cookie .= "Cookie: ".$val."\r\n";
}
echo "<pre><p>$headers<br />cookie: $cookie</p></pre>";

$data = preg_replace('/^\s+|\n|\r|\s+$/m', '', $data);

#########################################
#   POST with cookie
#########################################
$request2 .= "POST $path"."filter/ HTTP/1.1\r\n";
$request2 .= "Host: $host\r\n";
$request2 .= $user_agent;
$request2 .= "Accept: text/html,application/xhtml+xml,application/xml;\r\n";
$request2 .= "Connection: keep-alive\r\n";
$request2 .= $cookie;
$request2 .= "Referer: $path\r\n";
$request2 .= "Content-type: application/x-www-form-urlencoded; charset=UTF-8\r\n";
$request2 .= "Content-length: " . strlen($data) . "\r\n";
$request2 .= "\r\n";
$request2 .= "$data\r\n";
$request2 .= "\r\n";
fwrite($sock, $request2);

$http_response2 = stream_get_contents($sock);
list($headers2, $body2) = explode("\r\n\r\n", $http_response2, 2);

echo "<pre><p>$headers2</p></pre>";

所以我在第一个GET请求后得到响应,但是在POST请求后我没有得到响应。 如果我在第一次请求后关闭连接并在第二次请求之前重新打开它,那么它可以工作。但我想在一个连接中做到这一点。我不明白为什么没有重新连接它就无法工作。 请帮忙! :)

P.S。不建议使用CURL,因为我没有在此服务器上安装它。

0 个答案:

没有答案