2011-08-03 16 views
7

मैं कैसे पूर्ण अनुरोध हेडर देख सकते हैं, पद डेटा, php में libcurl का उपयोग भी शामिल?देखें 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-- 

तो हम अच्छी तरह से फ़ाइल मैं अपलोड करने कर रहा हूँ देखने के लिए, यह है सामग्री, सब कुछ वहाँ है। लेकिन cURL से बाहर डेटा प्राप्त करने पर मेरे सभी प्रयास जब मैं php से एक ही पोस्ट करने की कोशिश (CURLOPT_VERBOSE, या CURLINFO_HEADER_OUT का प्रयोग करके) अनुरोध हेडर कि पोस्ट डेटा की कमी है, इसलिए की तरह दिखाई देते हैं:

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 

सामग्री के आधार पर - यहां दीपक, ऐसा लगता है कि चीजें अच्छी तरह से चल रही हैं, लेकिन यह वास्तव में पूरा अनुरोध देखने में सक्षम होने के लिए मेरे डीबगिंग प्रयासों में मदद करेगा। मुझे यह भी परेशान है कि यह मुश्किल है, मुझे पूरी चीज देखने में सक्षम होना चाहिए; मुझे पता है कि मुझे कुछ याद आना चाहिए।

--- संपादित करें ---

क्या मैं के लिए देख रहा हूँ this के बराबर है:

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

जो libcurl में विकल्प CURLOPT_DEBUGFUNCTION के साथ उपलब्ध हो रहा है, लेकिन 'isn टी PHP में लागू किया गया। बू।

उत्तर

1

आप मल्टीपार्ट/फॉर्मडाटा भेज रहे हैं। curl मूल रूप से मुझे लगता है कि HTTP शीर्षलेख दिखाता है। "समस्या" यह है कि मल्टीपार्ट/फॉर्मडाटा में कई भाग होते हैं। यह "प्रथम स्तर के HTTP शीर्षलेख" से परे है और "मुख्य HTTP निकाय" के शरीर का हिस्सा है।

मुझे आपके पर्यावरण को नहीं पता है, लेकिन आप टीसीपी यातायात निगरानी का उपयोग करके डीबग कर सकते हैं। इसके लिए, आप Wireshark या tcpdump का उपयोग कर सकते हैं - Wireshark tcpdump द्वारा बनाई गई डंप फ़ाइलों को भी दिखा सकता है।

+2

यह बहुत उपयोगी है, धन्यवाद। ऐसा लगता है कि curl से अनुरोध के "मुख्य HTTP निकाय" के बारे में जानकारी प्राप्त करना अभी भी संभव होना चाहिए। – Chris

5

मुझे यह ठीक करने की आवश्यकता थी, लेकिन मुझे बैंक के साथ संचार की जांच करने की आवश्यकता थी।

यह Fiddler2 HTTPS का उपयोग यातायात डिक्रिप्शन सक्षम करें, और cURL उपयोग Fiddler2 के लिए इस स्थिति में डीबगिंग के लिए एक प्रॉक्सी के रूप में बहुत आसान है:

$proxy = '127.0.0.1:8888'; 
curl_setopt($ch, CURLOPT_PROXY, $proxy); 
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1); 
+0

जानकारी के लिए धन्यवाद! मैं अगली बार कोशिश करूंगा। – Chris

+0

कोई समस्या नहीं है, आप भी सभी कर्ताओं को अस्थायी रूप से स्वीकार करने के लिए curl सेट करना याद रखना चाहेंगे क्योंकि Fiddler2 स्वयं का उपयोग करता है (HTTPS ट्रैफ़िक को रोकने और इसे डिक्रिप्ट करने के लिए)। मुझे विश्वास है कि यह कुछ ऐसा है: curl_setopt ($ ch, CURLOPT_SSL_VERIFYPEER, false); – mk12

संबंधित मुद्दे