문제
다음 코드는 HTTPS가 아닌 PHP에서 CURL을 사용하여 검색된 URL의 신체 함량을 검색합니다. 헤더뿐만 아니라 데이터를 반환해야하므로 코드를 어떻게 편집하는지 말해 줄 수 있습니까?
내가 여기서 한 시험에서 결과는 결과입니다. 콘텐츠 길이가 있음을 알 수 있습니다. 액세스 방법 만 모르겠습니다.
감사합니다 Stephen
오류 : 0
문자열 (1457) "HTTP/1.1 200 OK 날짜 : SAT, 2009 년 8 월 01 일 06:32:11 GMT 서버 : APACHE/1.3.41 (DARWIN) PHP/5.2.4 MOD_SSL/2.8.31 OPENSSL/0.9.7L CACHE- 제어 : Max-Age = 60 만료 : 2009 년 8 월 1 일 Sat, 06:33:11 GMT 최종 수정 : Thu, 23 Nov 2006 17:44:53 GMT ETAG : "97D620-44B-4565DE15"수락-바이트 컨텐츠 -길이 : 1099 연결 : 닫기 내용 유형 : Text/HTML "
<?php
$curl_handle=curl_init();
$username = "";
$password = "";
$fullurl = "http://www.queensberry.com";
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_FAILONERROR, 0);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
curl_setopt($ch, CURLOPT_URL, $fullurl);
$returned = curl_exec($ch);
curl_close ($ch);
var_dump($returned);
?>
해결책
해결책은 다음과 같습니다. 이것을 시도하고, 코딩의 나머지를 위와 동일하게 유지하십시오 ...
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
//curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_FAILONERROR, 0);
// curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
curl_setopt($ch, CURLOPT_URL, $fullurl);
$returned = curl_exec($ch);
curl_close ($ch);
var_dump($returned);
Curlopt_header를 0으로 변경하면 페이지 컨텐츠 만 반환되도록합니다.
다른 팁
그렇지 않아야합니다 $fullurl
이다 "https://www.queensberry.com" ?
내가 변경했을 때 $fullurl
언급하고 코드를 실행했듯이 var_dump
"건설 중"페이지를 표시했습니다.
Curlopt_header를 0으로 설정하는 것이 옵션이 아니라는 것을 의미하는 헤더가 여전히 필요하다면 빈 줄 (두 CRLF)을 찾아 몸의 시작을 찾을 수 있습니다. 사양 참조 : http://www.w3.org/protocols/rfc2616/rfc2616-sec6.html
그래서 이것은 작업을 수행해야합니다.
$data = curl_exec($ch);
$start = strpos($data, "\r\n\r\n") + 4;
$body = substr($data, $start, strlen($data) - $start);
컬의 getInfo를 사용하여 헤더의 길이를 찾습니다. 그런 다음 응답을 기판합니다.
$info = curl_getinfo($ch);
$start = $info['header_size'];
$body = substr($result, $start, strlen($result) - $start);