2011-08-03 6 views
7

PHP에서 libcurl을 사용하여 게시물 데이터을 포함한 전체 요청 헤더 을 어떻게 볼 수 있습니까?POST 데이터로 완료된 cURL 요청 헤더보기

내가 브라우저에서 수행 라이브 HTTP 헤더에서 볼 페이지의 게시물을 시뮬레이션하기 위해 노력하고 있어요는 다음과 같습니다 :

https://###.com 
POST /###/### HTTP/1.1 
Host: ###.###.com 
...snipped normal looking headers... 
Content-Type: multipart/form-data; boundary=---------------------------28001808731060 
Content-Length: 697 
-----------------------------28001808731060 
Content-Disposition: form-data; name="file_data"; filename="stats.csv" 
Content-Type: text/csv 
id,stats_id,scope_id,stat_begin,stat_end,value 
61281,1,4,2011-01-01 00:00:00,2011-12-31 23:59:59,0 
-----------------------------28001808731060 
Content-Disposition: form-data; name="-save" 
Submit 
-----------------------------28001808731060-- 

그래서 우리가 잘 나는 업로드하고있어 파일을 참조하십시오, 그것의 콘텐츠, 모든 것이 있습니다. 내용에

POST /###/### HTTP/1.1 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0.1) Gecko/20100101 Firefox/4.0.1 
Host: ###.###.com 
...snipped normal-looking headers... 
Content-Length: 697 
Content-Type: multipart/form-data; boundary=----------------------------e90de36c15f5 

을 바탕으로 :하지만 PHP에서 같은 게시물을 만들려고 컬에서 데이터를 가져 오는 모든 나의 시도과 같이, 포스트 데이터 부족 요청 헤더를 보여 (CURLOPT_VERBOSE, 또는 CURLINFO_HEADER_OUT 사용) 길이가 길어지면 상황은 잘되고있는 것처럼 보이지만, 전체 디버깅 작업이 전체 요청을 볼 수 있도록 도움이 될 것입니다. 나는 또한 그것이 어렵다는 것을 괴롭 히고, 나는 모든 것을 볼 수 있어야한다. 나는 뭔가를 놓치고 있어야한다는 것을 안다.

--- 편집 --- 내가 무엇을 찾고 있어요 것은 this하는 것과 동일

:

curl --trace-ascii debugdump.txt http://www.example.com/ 

libcurl에있는 옵션 CURLOPT_DEBUGFUNCTION 사용할 것 같다,하지만 ISN ' t은 PHP로 구현되었습니다. 우우.

답변

1

multipart/formdata을 보내고 있습니다. 기본적으로 cURL은 완전히 추측 된 HTTP 헤더를 보여줍니다. "문제"는 다중 부분/양식 데이터가 여러 부분으로 구성된다는 것입니다. 이것은 "첫 번째 수준의 HTTP 헤더"와 "주요 HTTP 본문"본문의 일부입니다.

사용자의 환경을 잘 모르지만 TCP 트래픽 모니터링을 사용하여 디버깅 할 수 있습니다. 이를 위해 Wireshark 또는 tcpdump을 사용할 수 있습니다. Wireshark는 tcpdump로 만든 덤프 파일을 표시 할 수도 있습니다.

+2

, 감사합니다. cURL의 요청에 대한 "기본 HTTP 본문"에 대한 정보를 얻을 수 있어야합니다. – Chris

5

정확하게해야 할 필요가 있었지만 은행과의 의사 소통을 테스트해야했습니다.

그것은이 상황에서 디버깅을위한 프록시로, Fiddler2를 사용하는 HTTPS 트래픽 암호 해독을 활성화하고 컬을 사용 Fiddler2을 가지고 매우 쉽습니다 :

이 매우 유용
$proxy = '127.0.0.1:8888'; 
curl_setopt($ch, CURLOPT_PROXY, $proxy); 
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1); 
+0

정보 주셔서 감사합니다! 나는 다음에 그것을 시도 할 것이다. – Chris

+0

Fiddler2가 HTTPS 트래픽을 가로 채고 해독하기 위해 자체 인증서를 사용하므로 cURL을 설정하여 모든 인증서를 일시적으로 수락하도록 설정할 수도 있습니다. 나는 그것이 다음과 같다고 생각한다 : curl_setopt ($ ch, CURLOPT_SSL_VERIFYPEER, false); – mk12