php curl http狀態碼100解決辦法


基礎知識背景:
“Expect: 100-continue”的來龍去脈:
HTTP/1.1 協議里設計 100 (Continue) HTTP 狀態碼的的目的是,在客戶端發送 Request Message 之前,HTTP/1.1 協議允許客戶端先判定服務器是否願意接受客戶端發來的消息主體(基於 Request Headers)。
即, Client 和 Server 在 Post (較大)數據之前,允許雙方“握手”,如果匹配上了,Client 才開始發送(較大)數據。
這么做的原因是,如果客戶端直接發送請求數據,但是服務器又將該請求拒絕的話,這種行為將帶來很大的資源開銷。

libcurl 發送大於1024字節數據時啟用“Expect:100-continue‘特性:

在使用 curl 做 POST 的時候,當要 POST 的數據大於 1024 字節的時候,curl 並不會直接就發起 POST 請求,而是會分為兩步:
1. 發送一個請求,包含一個 "Expect: 100-continue" 頭域,詢問 Server 是否願意接收數據;
2. 接收到 Server 返回的 100-continue 應答以后,才把數據 POST 給 Server;
 

PHP Curl-library 可以主動封禁此特性:

PHP curl 遵從 libcurl 的特性。由於不是所有 web servers 都支持這個特性,所以會產生各種各樣的錯誤。如果你遇到了,可以用下面的命令封禁”Expect”頭域:

<?php
    //添加如下head頭就可傳輸大於1024字節請求
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM