문제

거의 모든 작업 PHP 프로그래머는 신용 카드 지불 처리, 사악한 화면 스크래핑 또는 그 사이의 무언가에 관계없이 CURL을 사용하여 원시 HTTP 요청을 보내야했습니다.

PHP 프로그래머가 모이는 거의 모든 포럼은 컬 기능이 원하는 것을 할 수 없습니다..

Curl이 당신을 위해 작동하지 않을 때, 그것이 작동하지 않는 이유를 파악하기 위해 어떤 문제 해결 기술을 사용합니까? PHP의 컬 구현으로 어떤 이상한 Gotchas를 실행 했습니까? 누군가가 포럼에서 "내 Curl IZ Broken"질문을 물어 보면, 요청이 작동하지 않는 이유를 알아 내기위한 단계는 무엇입니까?

도움이 되었습니까?

해결책

Curlinfo_header_out 옵션이 매우 유용하다고 생각합니다.

<?php
$curl = curl_init('http://www.php.net');

curl_setopt($curl, CURLOPT_HEADERFUNCTION, 'dbg_curl_data');
curl_setopt($curl, CURLOPT_WRITEFUNCTION, 'dbg_curl_data');
curl_setopt($curl, CURLINFO_HEADER_OUT, true);

curl_exec($curl);

echo '<fieldset><legend>request headers</legend>
  <pre>', htmlspecialchars(curl_getinfo($curl, CURLINFO_HEADER_OUT)), '</pre>
</fieldset>';

echo '<fieldset><legend>response</legend>
  <pre>', htmlspecialchars(dbg_curl_data(null)), '</pre>
</fieldset>';

function dbg_curl_data($curl, $data=null) {
  static $buffer = '';

  if ( is_null($curl) ) {
    $r = $buffer;
    $buffer = '';
    return $r;
  }
  else {
    $buffer .= $data;
    return strlen($data);
  }
}

다른 팁

사실, 나는 Curl (PHP)을 사용하지 않습니다. PHP 스트림 API는 훨씬 깔끔하며 데이터를 게시하는 데 사용될 수 있습니다. Wez Furlong 이것에 대한 기사가 있습니다.

내가 그것을 사용한다면? 모든 메시지를 켜는 것으로 시작합니다 (E_ALL에 오류보고를 설정). PHP가 오류 메시지에서 필요한 것을 알려주지 않으면 프록시 접근 방식을 사용하여 실제로 무슨 일이 일어나고 있는지 확인할 것입니다. 대상 URL을 다음과 같은 것을 포함하는 로컬 PHP 페이지로 변경

<?php
var_dump($_POST);
var_dump($_GET);
var_dump($_SERVER);

한 가지 방법입니다. 또 다른 방법은 Netcat과 같은 유틸리티를 사용하여 포트 80에서 듣고 요청을 보내는 것입니다.

netcat -l -p 80

이것은 컬로 돌아 오지 않지만 서버를 전송하는 내용을 정확히 볼 수 있으며 문제를 진단하기에 충분할 수 있습니다.

또한 PHP에서 헤더를 검색 할 수도 있습니다. apache_request_headers () 기능. 대부분의 경우 Netcat 접근 방식을 선호하지만 수정되지 않은 진실을보고 원시 게시물 데이터를 표시하기 때문에 NetCat 접근 방식을 선호합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top