1. 程式人生 > >解決PHP CURL POST 傳遞資料過大返回空值問題

解決PHP CURL POST 傳遞資料過大返回空值問題

問題:

最近用PHP CURL POST請求一個介面的時候,發現返回一個空,列印日誌也是空。問了介面提供方,介面提供方說我們這邊連線到他們的伺服器後,馬上又斷開了,並沒有POST資料過去。最奇怪的是,只有個別資料會這樣子,也就是說同樣的資料結構傳遞,只是傳遞的值不同,有的訪問正常,有的則是返回空值。 通過curl_error列印錯誤資訊顯示:empty replay from server。

最後找了很久,發現原來是傳遞資料量過大問題,而解決辦法也很簡單。

在POST請求時,新增一個header資訊,如下:

    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));

問題分析,當我們使用CURL做 POST 的時候,若傳遞的資料較大,這時候雖然我們可以和對方伺服器先進行三次握手,成功連線,但是並不會馬上POST資料過去,而是會先向對方伺服器傳送包含一個 "Expect: 100-continue" 頭域,詢問伺服器是否接受資料傳遞。而對方伺服器沒能給我們一個應答訊息,所以才會出現上面的連線對方伺服器後又斷開而沒有POST資料的情況。

本文參考: