2016-09-26 40 views
1

使用cURL通過POST發送數據時,如果該數據字符串是URL編碼的,或者其部分是URL編碼的,cURL在發送數據時會自動解碼數據。爲什麼cURL在POSTing時解碼我的URL編碼值?

在PHP中或直接在命令行中使用cURL時會發生這種情況。

我用cURL的兩個不同版本進行了測試:7.19和7.49。兩者都表現出相同的行爲

我發送了來自兩個不同服務器的cURL請求,認爲服務器的配置方式對此有所影響,但結果相同。

下面是一個簡單的PHP捲曲的要求,我用我的測試:

$ua = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.A.B.C Safari/525.13'; 

$data = "https%3A%2F%2Fexample.com%3A8081%2Ftemoignez%3FQid%3D%26"  

$ch = curl_init("https://example.com/test/webhook.php"); 
curl_setopt($ch, CURLOPT_USERAGENT, $ua); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, "payload=".$data); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

$response = curl_exec($ch); 

數據將被送到解碼,即使初始字符串URL編碼。

我通過使用PHP將POST數據轉儲到磁盤上的文件中來檢索數據。

這是正常的嗎?任何想法可能會導致這種情況?

+0

你爲什麼不想解碼? – bassxzero

+0

這與我的問題無關,具體的項目是URL編碼 –

+0

祝你好運,然後 – bassxzero

回答

2

你這裏有兩種不同的說法:

捲曲發送時數據自動解碼。

...

我乾脆甩了POST數據到一個文件取回後。

它是PHP自動解碼數據時收到它。它沒有得到解碼發送它!

這與其他值的行爲相結合,如cookie數據,發佈和獲取變量,頭引用信息(如引用程序).​​.....當接收到時,所有內容都會自動解碼,因爲它會被髮送編碼。

當您想要查看通過線路發送的確切數據時,請在端口80上使用類似ngrep的工具來嗅探TCP HTTP流量。

+0

那麼Postman和Hurl.it發送的URL編碼數據如何在接收時保持編碼? –

+0

@Remus三重檢查郵差實際發送的內容。這可能是爲你編碼你的數據,所以你發送它的雙重編碼。 – deceze

+0

@deceze我已經檢查過郵遞員文檔,它特別提到在URL欄或鍵/值編輯器中輸入的參數不會自動進行URL編碼 –