cURL错误8:无效的Content-Length:值

问题描述 投票:1回答:2

当我尝试使用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,它会引发先前的错误。

php curl wampserver guzzle php-curl
2个回答
1
投票

我怀疑你的连接是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。)


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]
);
© www.soinside.com 2019 - 2024. All rights reserved.