Curl POST 요청 헤더를 표시 하시겠습니까? 이를 수행하는 방법이 있습니까?


87

Curl 웹 자동화 앱을 구축 중이며 POST 작업의 원하는 결과를 얻지 못하는 문제가 있습니다. 내가 보내는 전체 POST 요청 (헤더 포함)을 어떻게 표시 할 수 있는지 파악하는 데 문제가 있습니다. 이것에 대해 검색했지만 나타나는 모든 것은 응답 헤더입니다. 실제로 나는 이것도 원하지만 Google에서 찾은 게시물 중 어느 것도 언급하지 않는 요청도 원합니다 ..

다음과 같은 것을 사용하여 curl 요청의 결과를 표시 할 수 있다는 것을 알고 있습니다 (내 구문이 꺼져 있으면 용서하십시오. 이미 참조 할 IDE 및 코드로 가상 머신을 종료했습니다.

 $result = curl($curl_exect) ;

어쨌든 전체 헤더를 보는 방법에 대한 조언을 주시면 감사하겠습니다.


답변:


83

다음을 수행하여 전송에 관한 정보를 볼 수 있습니다.

curl_setopt($curl_exect, CURLINFO_HEADER_OUT, true);

요청하기 전에

$information = curl_getinfo($curl_exect);

요청 후

보기 : http://www.php.net/manual/en/function.curl-getinfo.php

당신은 또한 CURLOPT_HEADER당신의curl_setopt

curl_setopt($curl_exect, CURLOPT_HEADER, true);

$httpcode = curl_getinfo($c, CURLINFO_HTTP_CODE);

return $httpcode == 200;

이들은 헤더를 사용하는 몇 가지 방법입니다.


4
나는 이것을 시도했지만 그것은 단지 POST의 배열을 출력하므로 정확한 헤더를 표시하지 않고 POST 만 표시하고 수신 서버가 그것을 보는 것과 정확히 일치하지 않으므로 문제 해결에 이상적이지 않습니다
Rick

5
대답은 완전하지 않습니다. 요청이 실행되기 전에 다음을 수행해야합니다.curl_setopt($curl_exect, CURLINFO_HEADER_OUT, true);
naitsirch 2016 년

1
이것은 서버가 보낸 것을 보여줍니다. curl_setopt ($ ch, CURLOPT_VERBOSE, true); 서버로 보내는 내용을 볼 수 있습니다.
Steven Teo

169

필요한 것은 다음과 같습니다.

curl_setopt($curlHandle, CURLINFO_HEADER_OUT, true); // enable tracking
... // do curl request    
$headerSent = curl_getinfo($curlHandle, CURLINFO_HEADER_OUT ); // request headers

6
POST 데이터도 어떻게 표시 할 수 있습니까? 즉, curl_setopt ($ ch, CURLOPT_POSTFIELDS, $ postData);
Dan Dascalescu 2013

@DanDascalescu 데이터를 게시 했으므로 Curl 요청을 만들 때 다시 캡처 할 필요가 없습니다. 참고 : POSTing 양식 값은 헤더가 아닌 "양식 데이터"로 전송되므로 위의 값이 표시되지 않습니다. 정말로 와이어에 무엇이 있는지 확인해야하는 경우 WireShark를 사용해보십시오.
Joseph Lust 2013

10

다음을 사용하여 curl에서 보낸 모든 헤더를 파일에 저장할 수 있습니다.

$f = fopen('request.txt', 'w');
curl_setopt($ch,CURLOPT_VERBOSE,true);
curl_setopt($ch,CURLOPT_STDERR ,$f);

6

다음을 사용하여 직접 헤더를 요청할 수 있습니다.

// open a socket connection on port 80
$fp = fsockopen($host, 80);

// send the request headers:
fputs($fp, "POST $path HTTP/1.1\r\n");
fputs($fp, "Host: $host\r\n");
fputs($fp, "Referer: $referer\r\n");
fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
fputs($fp, "Content-length: ". strlen($data) ."\r\n");
fputs($fp, "Connection: close\r\n\r\n");
fputs($fp, $data);

$result = ''; 
while(!feof($fp)) {
    // receive the results of the request
    $result .= fgets($fp, 128);
}

// close the socket connection:
fclose($fp);

요청하는 방법대한 글 처럼


게시물 주셔서 감사합니다. 나는 이것을 curl과 다른 라이브러리로 완전히 이해하지 못하는 것 같습니다. 컬만으로 이것을 할 수있는 방법이 있습니까? 그렇지 않다면, 나는 fputs에 익숙하지 않다는 것입니다.
Rick

이것은 실제로 PHP의 기본 기능입니다
SSH This

1
이것은 일종의 원시 요청을 노출하기 때문에 멋진 답변입니다. 나는 항상 설치해야하는 라이브러리 인 cURL을 사용하도록 배웠고 항상 사용할 수있는 것은 아닙니다.
Altimus Prime

2

최근에 똑같은 문제가 발생하여 Wireshark (네트워크 모니터링 도구)를 설치했습니다. 암호화 된 트래픽 (HTTPS)을 제외한 모든 것을 볼 수 있습니다.


2
WireShark는 WinCap 또는 다른 캡처 시스템에서 실행되므로 작동하려면 atheros 기반 칩셋이 있어야합니다. 크롬을 설치 Ctrl+Shift+J하고 XHR버튼을 누른 다음 파일 이름 을 클릭 한 다음 헤더와 데이터를 확인하는 것이 어떻습니까 ?
RobertPitt

나는 Wireshark를 시도했지만 내 보내는 컬 POST 트래픽 데리러하지 않는 것

나는 당신이 로컬 서버에서 작업하고 있다고 가정했습니다.
greg0ire

Robert, Chrome에서 말한대로하려고하는데 Ctrl + Shift + 3을했을 때 아무 것도하지 않습니다. 이에 대한 정보를 찾고 있지만 관련 정보를 찾을 수없는 것 같습니다. Chrome의 어떤 기능 액세스하는 중입니까? 감사합니다
Rick

: 좋아, 나는이 크롬에서 헤더를 볼 수에 대한 발견 google.com/support/forum/p/Chrome/... 나는 그것의 Ctrl 키 + 시프트를 믿고 난이 액세스 할 수 +
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.