我正在尝试通过套接字发送http请求。我写了以下代码:
$sock = fsockopen('ooooo.ru', 80, $errno, $errstr, 5);
fputs($sock, "GET / HTTP/1.1\r\n");
fputs($sock, "Host: http://ooooo.ru/\r\n");
fputs($sock, "Content-type: text/html\r\n");
echo fgets($sock);
但我有超时错误。但我可以正确地通过浏览器看到ooooo.ru
。为什么会这样?
答案 0 :(得分:1)
您必须发送一个空行以指示HTTP请求标头的结尾,并且当您没有请求主体指定类型时,您不应发送内容类型。
将fputs($sock, "Content-type: text/html\r\n");
替换为fputs($sock, "\r\n");
主机也需要是主机名而不是URL。
将fputs($sock, "Host: http://ooooo.ru/\r\n");
替换为fputs($sock, "Host: ooooo.ru\r\n");
更好的是,停止尝试自己编写HTTP并使用cURL library。