当我尝试使用Guzzle库发送请求时,我收到此错误。
GuzzleHttp \异常\ RequestException cURL错误8:无效的内容长度:值(请参阅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
,它会引发先前的错误。
我怀疑你的连接是MITM风格的拦截代理,它发送了错误的Content-Length标头,但无论如何,你可以告诉curl忽略带有CURLOPT_IGNORE_CONTENT_LENGTH
选项的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字节,具体取决于服务器配置,可能是A很慢,许多服务器保持连接打开以进行套接字重用方案。您可能希望在必须忽略内容长度标头时添加http标头Connection: close
。)
我遇到了与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]
);