는 여기에 내가 곱슬 페이지 스크래핑 문제를 디버깅하는 방법을 연습입니다 :
- 은 ( LiveHTTPHeaders와) 브라우저에서 URL을 시도하고 CURLOPT_VERBOSE와 컬에서 사용 가능. 이것은 두 가지 용도로 사용됩니다. HTTP 헤더를 공개하고 URL의 간단한 테스트 역할을합니다.
- 브라우저에서는 작동하지만 cURL에서는 작동하지 않는 경우 HTTP 헤더 cURL이 브라우저와 일치 할 때까지 cURL로 작업하십시오.
예제로 시도해 보겠습니다. 서버가 응답하는 아니에요
* About to connect() to www.betjamaica.com port 80
* Trying 72.52.5.34... * connected
* Connected to www.betjamaica.com (72.52.5.34) port 80
> GET /livelines2008/lines.asmx/Load_Latest_Lines?SportType=Football&SportSubType=NFL&GameType=GAME HTTP/1.1
Host: www.betjamaica.com
Accept: */*
* Empty reply from server
* Connection #0 to host www.betjamaica.com left intact
* Closing connection #0
:
URL은 브라우저에서 작품을 제공, 그러나 ...
이 CURLOPT_VERBOSE을 설정하면 다음과 같은 보여준다. 브라우저 요청과 cURL 요청 간의 유일한 차이점은 브라우저가 더 많은 헤더를 전송한다는 것입니다. 따라서 브라우저 헤드가 작동하기 시작할 때까지 브라우저 헤더를 추가하는 것이 좋습니다. 브라우저가 보내는 모든 헤더를 복사하는 경우 요청은 동일해야하며 결과적으로 기능적이어야합니다. 여기
은 단순히 복사하여 PHP로 내 파이어 폭스 요청 헤더를 붙여 넣은 :
$request_url =
'http://www.betjamaica.com/livelines2008/lines.asmx/Load_Latest_Lines?SportType=Football&SportSubType=NFL&GameType=GAME';
$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, $request_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_VERBOSE, true);
$headers = array(
'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.16) Gecko/2009120208 Firefox/3.0.16',
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language: en-us,en;q=0.5',
'Accept-Encoding: gzip,deflate',
'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7',
'Keep-Alive: 300',
'Connection: keep-alive',
);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$data = curl_exec($ch);
curl_close($ch);
var_dump($data);
을 그리고 그것은 작동합니다.
$headers = array(
'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.16)',
);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
을 그리고 거기 당신은 다음과 같습니다 : 조금 더 실험은 사용자 에이전트 이외의 모든 헤더를 제거 할 수 있다는 것을 보여 분명히이 IIS 서버가 사용자 에이전트없이 요청을 처리하기를 거부한다. 하나 추가하면 갈 수 있습니다.
오류 코드를 확인하지 않고 있습니다. 그 시작하는 것이 좋을 것입니다;) –