在通常情況下,我們使用 CURL 來提交 POST 資料的時候,我們已經習慣了這樣的寫法:
curl_setopt( $ch, CURLOPT_POSTFIELDS,$post_data);
但是這樣的寫法在有時候並不會很好用,可能會得到伺服器傳回的 500 錯誤。但是我們嘗試在使用 Socket 方式向伺服器提交資料的時候,我們會得到非常正確的結果。
例如我們在伺服器上面存在一個如下的PHP 檔案:
<?php print_r($_SERVER);?>
當我們採用CURL 在不注意細節的前提下向伺服器發送一些數據,我們可能得到下面這樣的結果,這不是我們理想中的結果:
[CONTENT_TYPE] => multipart/form-data; boundary=—————————-f924413ea122
但是如果我們在採用http_build_query($post_data) 來替代$post_data 再向這個PHP 腳本提交資料的時候,我們就會得到和上面不同的結果,這才是我們理想中的結果:
[CONTENT_TYPE] => application/x-www-form-urlencoded
從上面這個例子中不難看出,使用CURL 並且參數為資料時,向伺服器提交資料的時候,HTTP頭會發送Content_type: application/x-www-form-urlencoded。這是正常的網頁