我使用以下脚本向网站发送GET请求但是,我一直收到错误,服务器没有响应。
以下是使用套接字将请求发送到站点的代码,如果连接不成功,则返回错误:“服务器无响应”。
<?php
error_reporting(0);
set_time_limit(0);
ini_set("default_socket_timeout", 5);
function http_send($host, $packet)
{
if (!($sock = fsockopen($host, 80)))
die( "\n[-] No response from {$host}:80\n");
fwrite($sock, $packet);
return stream_get_contents($sock);
}
$host="http://example.com";
$path="/";
$packet = "GET {$path} HTTP/1.0\r\n";
$packet .= "Host: {$host}\r\n";
$packet .= "Connection: close\r\n\r\n";
http_send($host, $packet);
?>
那么,上面的代码中有什么错误,它无法发送GET请求?
对我来说似乎没问题,它将形成GET请求的HTTP请求标头并存储在$ packet变量中。
$ host是目标站点名称。
然后它调用函数http_send,它将发送请求。
错误输出:[ - ] http://example.com:80无响应
答案 0 :(得分:1)
通过传入fsockopen
和errno
的参数来查看errstr
返回的错误:
if (!($sock = fsockopen($host,80,$err_no,$err_str)))
die($err_no.': '.$err_str);
答案 1 :(得分:1)
$fp = fsockopen("127.0.0.1", 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
$out = "GET /out.php HTTP/1.1\r\n";
$out .= "Host: 127.0.0.1\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
while (!feof($fp)) {
echo fgets($fp, 128);
}
fclose($fp);
}
out.php包含
<?php
echo 'got in';
获得的输出
HTTP/1.1 200 OK Date: Mon, 05 Nov 2012 08:23:11 GMT Server: Apache/2.2.21 (Win32)
mod_ssl/2.2.21 OpenSSL/1.0.0e PHP/5.3.8 mod_perl/2.0.4 Perl/v5.10.1 X-Powered-By:
PHP/5.3.8 Content-Length: 6 Connection: close Content-Type: text/html got in