แสดงส่วนหัวของคำขอ Curl POST? มีวิธีทำไหม?


87

ฉันกำลังสร้างแอป Curl Web Automation และมีปัญหากับการไม่ได้รับผลลัพธ์ที่ต้องการจากการดำเนินการ POST ของฉันฉันมีปัญหาในการหาวิธีแสดงคำขอ POST แบบเต็มที่ฉันส่งไป (พร้อมส่วนหัว) ได้ค้นหาสิ่งนี้ แต่ทุกสิ่งที่เกิดขึ้นคือส่วนหัวการตอบกลับที่จริงฉันต้องการสิ่งเหล่านี้เช่นกัน แต่ยังเป็นคำขอซึ่งไม่มีโพสต์ใดที่ฉันพบใน google ดูเหมือนจะพูดถึง ..

ฉันรู้ว่าฉันสามารถแสดงผลลัพธ์ของคำขอ curl โดยใช้สิ่งนี้ได้ (ยกโทษให้ฉันถ้าไวยากรณ์ของฉันปิดอยู่ฉันได้ปิดเครื่องเสมือนของฉันแล้วด้วย ide และรหัสที่จะอ้างถึง

 $result = curl($curl_exect) ;

อย่างไรก็ตามฉันขอขอบคุณอย่างยิ่งสำหรับคำแนะนำเกี่ยวกับวิธีดูส่วนหัวแบบเต็มขอบคุณ


อาจซ้ำกันได้: stackoverflow.com/questions/866946/…

คำตอบ:


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

1
สิ่งนี้จะแสดงเฉพาะสิ่งที่เซิร์ฟเวอร์ส่งกลับมา ดูเหมือนว่า curl_setopt ($ ch, CURLOPT_VERBOSE จริง); จะช่วยให้คุณเห็นสิ่งที่คุณส่งไปยังเซิร์ฟเวอร์
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

@DanDascalescu เนื่องจากคุณโพสต์ข้อมูลแล้วเมื่อสร้างคำขอ Curl จึงไม่จำเป็นต้องบันทึกข้อมูลกลับ หมายเหตุ: การโพสต์ค่าฟอร์มจะถูกส่งเป็น "ข้อมูลแบบฟอร์ม" ไม่ใช่ส่วนหัวด้วยเหตุนี้จึงไม่แสดงค่าดังกล่าว หากคุณต้องการดูว่ามีอะไรอยู่บนสายให้ลองใช้ WireShark
Joseph Lust

10

คุณสามารถบันทึกส่วนหัวทั้งหมดที่ส่งโดย curl ไปยังไฟล์โดยใช้:

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

7

คุณสามารถขอส่วนหัวได้ด้วยตัวเองโดยใช้:

// 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

1
นี่เป็นคำตอบที่ยอดเยี่ยมเนื่องจากเป็นการเปิดเผยคำขอดิบ ฉันมักจะถูกสอนให้ใช้ cURL ซึ่งเป็นไลบรารีที่บางครั้งต้องติดตั้งและไม่สามารถใช้งานได้ตลอดเวลา
Altimus Prime

2

เมื่อเร็ว ๆ นี้ฉันมีปัญหาเดียวกันและฉันติดตั้ง Wireshark (เป็นเครื่องมือตรวจสอบเครือข่าย) คุณสามารถดูทุกอย่างได้ด้วยสิ่งนี้ยกเว้นการรับส่งข้อมูลที่เข้ารหัส (HTTPS)


2
WireShark ทำงานบน WinCap หรือระบบจับภาพอื่นคุณต้องมีชิปเซ็ตที่ใช้ atheros เพื่อให้ใช้งานได้ฉันคิดว่าทำไมคุณไม่ติดตั้ง chrome Ctrl+Shift+Jแล้วกดจากนั้นคลิกที่XHRปุ่มและชื่อไฟล์จากนั้นดูส่วนหัวและข้อมูล
RobertPitt

ฉันลอง Wirehark แต่ดูเหมือนว่าจะไม่รับปริมาณการใช้งาน Curl POST ขาออกของฉัน
Rick

ฉันสันนิษฐานว่าคุณกำลังทำงานบนเซิร์ฟเวอร์ภายในใช่หรือไม่?
greg0ire

โรเบิร์ตฉันพยายามทำตามที่คุณพูดใน Chrome แต่มันไม่ได้ทำอะไรเลยเมื่อฉันกด Ctrl + Shift + 3 ฉันกำลังค้นหาข้อมูลเกี่ยวกับสิ่งนี้ แต่ดูเหมือนจะไม่พบสิ่งที่เกี่ยวข้องคุณสมบัติของ Chrome นี่คือการเข้าถึง? ขอบคุณ
Rick

ตกลงฉันพบสิ่งนี้เกี่ยวกับการดูส่วนหัวใน Chrome: google.com/support/forum/p/Chrome/…ฉันเชื่อว่ามัน Ctrl + Shift + i เพื่อเข้าถึงสิ่งนี้
Rick
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.