fsockopen과 fgets를 사용할때 문제가 있습니다.
글쓴이: lkjt / 작성시간: 화, 2005/12/06 - 2:25오전
PHP에서 fopen으로 웹사이트를 열어 수신받을때
fgets를 사용해도 아무 탈 없습니다.
그런데 fsockopen으로 웹사이트에 쿼리를 보내서
수신받을때
while(!feof($fp))
fgets($fp, 128)
로 하면, 60초 타임아웃이 납니다.(이렇게 오래 안걸리는 작업인데;;)
while대신에 for로 해봣더니
잘 됩니다.
하지만 이방법은 적당하지 않아보입니다.
$c=fread($fp, 1); if($c==NULL) break; $cntnt.=$c;
이런식으로 서도 안되구요...
어떻게 해결해야하죠???
Forums:
[code:1]$data = '';while(false !==
이렇게 해 보세요.
그리고, 언어를 명시해 주시는것이 좋다고 생각됩니다.
제목만 보고는 잘 티가 안나서 안보거나,
오해해서 보는 경우가 있겠네요.
https://xenosi.de/
[quote="송효진"][code:1]$data = '';while&
앗, 죄송합니다.
제목에 적으려다가 제목이 길어져서 안쓰고 본문에 쓰려고 했는데, 깜빡했네요. 이언어는 PHP입니다.
가르쳐주신대로 했는데도 타임아웃이 나네요...
이소스 코드에서 타임아웃은 fgets 줄에서 납니다.
혹시 헤더를 안보내셨습니까?[url]http://kr.php.net/
혹시 헤더를 안보내셨습니까?
http://kr.php.net/manual/en/function.fsockopen.php
http 연결을 할 때는 먼저 보내고 받습니다.
https://xenosi.de/
[quote="송효진"]혹시 헤더를 안보내셨습니까?[url]http:
아닙니다.
GET 로 시작되는 것을 보냈습니다.
for로 일정수 루프 돌리면 받아집니다.
꼭 fsocketopen을 써야하는 상황이 아니면 file_get_con
꼭 fsocketopen을 써야하는 상황이 아니면 file_get_contents는 어떤가요? 물론 이것은 allow_url_fopen이 on인 상황에서만 동작합니다만, 소스를 읽어와서 string으로 리턴합니다. 다른건 신경써줄 필요도 없고 편하던데...
--->
데비안 & 우분투로 대동단결!
아...referer체크를 해서요...
아...
referer체크를 해서요...
[quote="Anonymous"]아...referer체크를 해서
pear의 HTTP_Request같은 라이브러리를 쓰실 것을 권합니다.
- 토끼군
다 귀찮으면....[code:1]$text = shell_exec&#
다 귀찮으면....
$text = shell_exec('wget -q --referer "'.$referer.'" -O /dev/stdout "'.$targeturl.'"');
https://xenosi.de/
타임아웃이 나는 이유가.. 요청 시 프로토콜을 HTTP/1.0 이상으로
타임아웃이 나는 이유가.. 요청 시 프로토콜을 HTTP/1.0 이상으로 하였고 Connection: keep-alive 를 보냈기 때문에 웹서버가 응답을 다 하고도 연결을 끊지 않아서 eof가 발생하지 않은 것 입니다.
HTTP/1.1은 Content-length 헤더로 보내져 오는 컨텐츠의 양을 판단해야 합니다.. 또는 chunked 응답이라면 보내오는 컨텐츠의 내용에 붙어 있는 chunk들을 분석해서 컨텐츠의 끝을 알아내야 합니다.
쉽게 가시려면 HTTP/1.0, Connection: close로 요청하시고 어렵게 하시려면 헤더나 컨텐츠 내용을 실시간으로 분석해서 처리하시면 됩니다.
curl extension을 쓰셔도 쉽게 푸실 수 있습니다.
댓글 달기