2017-12-07 3 views
0

내가 혼란스럽게하는 것을 묻고 싶습니다. 이 링크PHP CURL이 비어있는 경우가 있습니다.

echo set_user_agent_grab("https://www.bandros.co.id/produk/dress-atasan-baju-rajut-wanita-sad-500"); 

에서 HTML 코드를 얻으려면 CURL을 사용 I'am 그리고 이것은 때때로 내가 반환 빈, 난이에서 알고 그나마 가지고, 내 기능

function set_user_agent_grab($link){ 
    $headers = ["text/html; charset=UTF-8"]; 
      $ch = curl_init(); 
      curl_setopt($ch, CURLOPT_URL, $link); 
      curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.2 (KHTML, like Gecko) Chrome/5.0.342.3 Safari/533.2'); 
      curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
      curl_setopt($ch, CURLOPT_MAXREDIRS, 10); 
      curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); 
      curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); 
      curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
      curl_setopt($ch, CURLOPT_ENCODING, 'gzip'); 
      $result = curl_exec($ch); 
      curl_close($ch); 
      return $result; 
    } 

문제 내 서버 또는 사이트 보호에서 내가 모르는, 제발 말해, 고마워.

+0

나는 내가 편집 추가 $의 CH = curl_init로 내() 함수 봤는데, $의 ch'이 – Jeff

+0

죄송 i'am 깜빡 정의되지 않는다 '때문에이 어쨌든 실행됩니다 궁금; –

+2

curl_exec()를 호출 한 후에'var_dump (curl_getinfo ($ ch))','var_dump (curl_errno ($ ch))'및'var_dump (curl_error ($ ch))'를 사용하면 약간의 통찰력을 줄 수 있습니다. 어떤 응답 상태 정보도 보지 않고 있습니다. – Scuzzy

답변

0

CURLOPT_VERBOSE는 어떤 일이 있었는지 밝혀야합니다. 그래서 curl_exec가 실패했는지 확인하고, 실패하면 RuntimeException을 던져서 다음 번에 PHP 오류 로그를 확인하십시오. 또한 curl_errno() 및 curl_error가 무엇을 말하고 있는지 확인할 수 있습니다.

function set_user_agent_grab($link) { 
    $headers = [ 
      "text/html; charset=UTF-8" 
    ]; 
    $ch = curl_init(); 
    $debugfileh = tmpfile(); 
    $debugfile = stream_get_meta_data ($debugfileh) ['uri']; 
    try { 
     curl_setopt ($ch, CURLOPT_VERBOSE, 1); 
     curl_setopt ($ch, CURLOPT_STDERR, $debugfileh); 

     curl_setopt ($ch, CURLOPT_URL, $link); 
     curl_setopt ($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.2 (KHTML, like Gecko) Chrome/5.0.342.3 Safari/533.2'); 
     curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, true); 
     curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true); 
     curl_setopt ($ch, CURLOPT_MAXREDIRS, 10); 
     curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 30); 
     curl_setopt ($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); 
     curl_setopt ($ch, CURLOPT_HTTPHEADER, $headers); 
     curl_setopt ($ch, CURLOPT_ENCODING, 'gzip'); 
     $result = curl_exec ($ch); 
     if (! is_string ($result)) { 
      $errstr = "curl_exec failed: " . curl_errno ($ch) . ": " . curl_error ($ch) . ". debuginfo: " . file_get_contents ($debugfile); 
      throw new RuntimeException ($errstr); 
     } 
     return $result; 
    } finally{ 
     fclose ($debugfileh); 
     curl_close ($ch); 
    } 
} 
+0

mr @hanshenrik 전에 감사드립니다. error_log 파일에 오류가 표시되지 않으며 웹 사이트의 쿠키에 영향을 미칠 수 있습니까? 쿠키를 사용하는 경우 어떻게 사용합니까? –

+0

@CSMMedia libcurl은 기본적으로이 코드가 실행될 때마다 쿠키를 사용하지 않고 신선한 상태로 시작합니다. 그러나 당신의 오류 로깅은 깨진 것입니까? 이 디버깅을하기 전에 오류 로깅을 수정해야합니다. 간단한 테스트 케이스로' hanshenrik

+0

ok, 도움을 주셔서 대단히 감사합니다. iCache를 사용하여 5 분마다 cronjob을 사용하여 error_log에 오류가 표시되지 않도록 개인적으로 논의 할 수 있도록 모든 코드를 공유 할 수 있습니다. 도와주세요, 제발. –

관련 문제