2014-04-10 6 views
0

소켓을 통해 http 요청을 보내려고합니다. 나는 다음과 같은 코드를 작성했다.http get request timeout

$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

왜 GET 요청에 콘텐츠 형식을 보내고 있습니까? – Quentin

+0

어쨌든 원시 HTTP를 다루는 이유는 무엇입니까? PHP에는 [cURL 라이브러리] (http://php.net/curl)가 있습니다. – Quentin

답변

1

HTTP 요청 헤더의 끝을 표시하려면 빈 줄을 보내야하며 요청 본문을 지정하지 않은 경우 콘텐츠 유형을 보내면 안됩니다.

는 호스트는 호스트 이름과 URL이 아니라 필요 fputs($sock, "\r\n");

fputs($sock, "Content-type: text/html\r\n");를 교체합니다.

쓰기 HTTP 자신과 cURL library을 사용하는 일을 그만, 더 좋은 fputs($sock, "Host: ooooo.ru\r\n");

으로 fputs($sock, "Host: http://ooooo.ru/\r\n");를 교체합니다.