php curl post請(qǐng)求超過1024字節(jié)解決方法

在yii2框架中使用CURL,報(bào)錯(cuò)了,錯(cuò)誤如下:

string(1570) "

錯(cuò)誤

您所請(qǐng)求的網(wǎng)址(URL)無法獲取

當(dāng)嘗試進(jìn)行以下請(qǐng)求時(shí):

POST /api/?do=weixinclient&handle=client HTTP/1.1

Host: ghedu.taisha.org

User-Agent: Yii2-Curl-Agent

Accept: */*

Content-Length: 1096

Content-Type: application/x-www-form-urlencoded

Expect: 100-continue

發(fā)生了下列的錯(cuò)誤:

Invalid Request

無效的請(qǐng)求

Some aspect of the HTTP Request is invalid. Possible problems:

HTTP 請(qǐng)求的某些方面是無效的??赡苁窍铝袉栴}:

Missing or unknown request method

缺少請(qǐng)求方式或未知的請(qǐng)求方式

Missing URL

缺少網(wǎng)址

Missing HTTP Identifier (HTTP/1.0)

缺少 HTTP 標(biāo)識(shí)(HTTP/1.0)

Request is too large

請(qǐng)求命令過長(zhǎng)

Content-Length missing for POST or PUT requests

POST 或 PUT 請(qǐng)求缺少內(nèi)容長(zhǎng)度

Illegal character in hostname; underscores are not allowed

主機(jī)名稱中包含不合法的字符;下劃線是不允許的。

本緩存服務(wù)器管理員:webmaster.

后來發(fā)現(xiàn)是post提交數(shù)據(jù)時(shí),數(shù)據(jù)大于1024字節(jié),解決方法如下:

基礎(chǔ)知識(shí)背景:

“Expect: 100-continue”的來龍去脈:

HTTP/1.1 協(xié)議里設(shè)計(jì) 100 (Continue) HTTP 狀態(tài)碼的的目的是,在客戶端發(fā)送 Request Message 之前,HTTP/1.1 協(xié)議允許客戶端先判定服務(wù)器是否愿意接受客戶端發(fā)來的消息主體(基于 Request Headers)。

即, Client 和 Server 在 Post (較大)數(shù)據(jù)之前,允許雙方“握手”,如果匹配上了,Client 才開始發(fā)送(較大)數(shù)據(jù)。

這么做的原因是,如果客戶端直接發(fā)送請(qǐng)求數(shù)據(jù),但是服務(wù)器又將該請(qǐng)求拒絕的話,這種行為將帶來很大的資源開銷。

libcurl 發(fā)送大于1024字節(jié)數(shù)據(jù)時(shí)啟用“Expect:100-continue‘特性:

在使用 curl 做 POST 的時(shí)候,當(dāng)要 POST 的數(shù)據(jù)大于1024字節(jié)的時(shí)候,curl 并不會(huì)直接就發(fā)起 POST 請(qǐng)求,而是會(huì)分為兩步:

1.發(fā)送一個(gè)請(qǐng)求,包含一個(gè)"Expect: 100-continue"頭域,詢問Server是否愿意接收數(shù)據(jù);

2.接收到Server返回的100-continue 應(yīng)答以后,才把數(shù)據(jù) POST 給Server;

PHP Curl-library 可以主動(dòng)封禁此特性:

PHP curl 遵從 libcurl 的特性。由于不是所有 web servers 都支持這個(gè)特性,所以會(huì)產(chǎn)生各種各樣的錯(cuò)誤。如果你遇到了,可以用下面的命令封禁”Expect”頭域:

<?php

? ? ? ? //添加如下head頭就可傳輸大于1024字節(jié)請(qǐng)求

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

?>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,558評(píng)論 19 139
  • 轉(zhuǎn)載自:http://www.cnblogs.com/txw1958/archive/2013/01/19/286...
    php_bruce閱讀 2,452評(píng)論 1 5
  • cURL是一個(gè)利用URL語法規(guī)定來傳輸文件和數(shù)據(jù)的工具,支持很多協(xié)議和選項(xiàng),如HTTP、FTP、TELNET等,能...
    司馬東陽閱讀 1,518評(píng)論 0 6
  • 原文地址:PHPcURL庫函數(shù)抓取頁面內(nèi)容(轉(zhuǎn))作者:巴克 cURL是一個(gè)利用URL語法規(guī)定來傳輸文件和數(shù)據(jù)的工具...
    司馬東陽閱讀 1,267評(píng)論 0 3
  • 一、什么是CURL? cURL 是一個(gè)利用URL語法規(guī)定來傳輸文件和數(shù)據(jù)的工具,支持很多協(xié)議,如HTTP、FTP、...
    茶藝瑤閱讀 4,823評(píng)論 0 6

友情鏈接更多精彩內(nèi)容