我正在使用以下腳本向網站發送GET請求,但是,我不斷收到錯誤,服務器沒有響應。PHP套接字GET請求
- 我已經運行wireshark查看由於運行此腳本而產生的任何流量,但沒有流量。
- 我可以從瀏覽器連接到網站,我也可以通過使用file_get_contents函數檢索內容,但是使用套接字,我無法做到這一點。
下面是使用套接字將請求發送到站點的代碼,如果連接不成功,它將返回錯誤:「服務器沒有響應」。
<?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。
錯誤輸出:[ - ]被返回由fsockopen
在誤差從http://example.com:80
爲什麼使用套接字而不是file_get_contents和stream_context? – grunk