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.