2010-07-02 86 views
71

我正在構建一個Curl web自動化應用程序,並且遇到了一些問題,無法獲得POST動作的預期結果,我在解決如何顯示完整的POST請求時遇到了一些問題(通過標題) ,我一直在尋找這個,但所有出現的是響應標題,實際上我也想要這些,但也要求,我沒有發現在谷歌上的帖子似乎提到..顯示捲曲POST請求標題?有沒有辦法做到這一點?

我知道我可以顯示使用這樣的事情(原諒我,如果我的語法是關閉的捲曲請求的結果,我已經關閉了我的虛擬機,我的IDE和代碼來引用

$result = curl($curl_exect) ; 

反正,我將不勝感激關於如何查看完整的標題的任何建議,謝謝

+1

使用**'CURLOPT_VERBOSE' **。 – ekillaby 2012-05-15 18:09:40

+0

可能的重複:http://stackoverflow.com/questions/866946/how-can-i-see-the-request-headers-made-by-curl-when-sending-a-request-to-the-ser – 2013-01-30 22:06:35

回答

52

您可以通過執行看到有關轉讓的信息:

curl_setopt($curl_exect, CURLINFO_HEADER_OUT, true); 

請求之前,和

$information = curl_getinfo($curl_exect); 
請求後

查看:http://www.php.net/manual/en/function.curl-getinfo.php

您還可以使用CURLOPT_HEADERcurl_setopt

curl_setopt($curl_exect, CURLOPT_HEADER, true); 

$httpcode = curl_getinfo($c, CURLINFO_HTTP_CODE); 

if($httpcode == 200) { 
    return true; 
} 

return false; 

這些都只是用頭的一些方法。

+4

我試過這個,但它只是輸出一個POST數組,所以它沒有顯示確切的標題,只有POST和不完全如接收服務器會看到它,所以它不理想的故障排除 – Rick 2010-07-02 15:57:17

+4

答案不完整。在執行請求之前,您必須'curl_setopt($ curl_exect,CURLINFO_HEADER_OUT,true);' – naitsirch 2016-03-09 09:28:11

+0

這隻顯示服務器發回的內容。看起來像curl_setopt($ ch,CURLOPT_VERBOSE,true);將允許您查看您發送給服務器的內容。 – 2017-05-19 05:37:29

3

我最近有完全相同的問題,並且我安裝了Wireshark(它是一個網絡監視工具)。除了加密流量(HTTPS),您可以看到所有內容。

+2

WireShark在WinCap或其他捕獲系統上運行,你必須有一個基於atheros的芯片組才能工作,我想,爲什麼不安裝chrome並按下「Ctrl + Shift + J」,然後點擊'XHR'按鈕和文件名然後查看標題和數據。 – RobertPitt 2010-07-02 10:07:12

+0

我試過wireshark,但它似乎沒有拿起我即將離任的捲曲POST流量 – Rick 2010-07-02 15:47:01

+0

我假設你在本地服務器上工作,是這樣嗎? – greg0ire 2010-07-02 16:01:46

4

你可以讓你自己使用請求頭:

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

像writen上how make request

+0

感謝這篇文章,我想我不完全理解這是一個不同於curl的庫,對吧?有沒有辦法做到這一點只是捲曲?如果沒有,我會考慮這樣做,只是我不熟悉fputs – Rick 2010-07-02 16:11:04

+0

這實際上是php – 2012-04-18 21:31:49

142

這裏是所有你需要:

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

的本地功能最佳答案IMO – marlar 2013-04-10 14:53:52

+6

如何顯示POST數據?即通過curl_setopt($ ch,CURLOPT_POSTFIELDS,$ postData)添加; – 2013-11-20 10:09:49

+0

@DanDascalescu由於您發佈了數據,因此在創建Curl請求時,無需將其捕獲回來。注意:發佈表單值是以「表單數據」的形式發送的,而不是標題,因此上述內容爲何不顯示。如果您確實需要了解線路上的情況,請嘗試WireShark。 – 2013-11-20 19:31:28

8

您可以保存所有的頭被捲曲發使用以下文件:

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