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

时间:2019-02-17 07:40:35

标签: php curl wampserver guzzle php-curl

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

2 个答案:

答案 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]
);