当我尝试使用Guzzle库发送请求时,出现此错误。
GuzzleHttp \ Exception \ RequestException
cURL错误8:无效的Content-Length:值(请参见http://curl.haxx.se/libcurl/c/libcurl-errors.html)
我已经看到了上面的链接,但是它没有任何有用的信息。
我使用wamp64和Windows进行开发。
以下是我的代码:
use guzzle\http\Client;
$headers = [
'User-agent'=> 'Mozilla/5.0',
'Accept'=>
'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'Accept-Encoding'=> 'gzip',
];
$client = new Client();
$start_time = time();
$response = $client->request(
'get',
'https://www.google.com',
['headers' => $headers]
);
编辑:
它适用于https://yahoo.com
,但适用于http://yahoo.com
,它会引起以前的错误。
答案 0 :(得分:0)
我怀疑您的连接位于发送错误的Content-Length标头的MITM样式的拦截代理之后,但是无论如何,您都可以使用CURLOPT_IGNORE_CONTENT_LENGTH
选项告诉curl忽略Content-Length-不幸的是,PHP缺少CURLOPT_IGNORE_CONTENT_LENGTH的常量,但是它的魔术数是136,这意味着您可以做到
if(!defined("CURLOPT_IGNORE_CONTENT_LENGTH")){
define("CURLOPT_IGNORE_CONTENT_LENGTH",136);
}
$response = $client->request(
'get',
'https://www.google.com',
['headers' => $headers, 'curl'=>[CURLOPT_IGNORE_CONTENT_LENGTH=>true]]
);
(请注意,这可能会带来很大的性能损失,因为现在curl必须继续从套接字读取直到服务器关闭套接字为止,而不是直到接收到Content-Length字节为止才进行读取,具体取决于服务器配置,可能会慢很多,许多服务器会为套接字重用方案保持连接打开状态。您可能想添加http标头Connection: close
,而不得不忽略内容长度标头。)
答案 1 :(得分:0)
我在使用cURL时遇到了同样的问题,并使用
进行了排序 'Content-Length: ' . strlen($data_string))
其中
$data_string
包含所有POST
数据
在您的情况下,看起来像这样
use guzzle\http\Client;
$headers = [
'User-agent'=> 'Mozilla/5.0',
'Content-Length' => '0',
'Accept'=>
'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'Accept-Encoding'=> 'gzip',
];
$client = new Client();
$start_time = time();
$response = $client->request(
'get',
'https://www.google.com',
['headers' => $headers]
);