我有一个cURL请求,如果在没有Content-Length头的情况下执行,它会给我一个411长度要求的错误。当我将$header[] = 'Content-Length: 0
添加到我的头数组时,它执行得很慢(~ 15秒)。
我在不同的域上使用相同的代码没有任何问题。在这个域上,我不需要设置内容长度头,我没有收到411错误。我认为内容长度错误可能与这个问题有关,因为只有PUT请求应该给予我这个错误。
这是我当前的cURL请求:
$curl = curl_init();
$header[] = 'Authorization: Basic 123123';
$header[] = 'Accept: text/xml';
//$header[] = 'Content-Length: 0';
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$output = curl_exec($curl);
$error = curl_error($curl);
字符串
编辑:我已经更改了CURLOPT_URL
并添加了CURLOPT_POSTFIELDS
。
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
型
而不是
curl_setopt($curl, CURLOPT_URL, $url . $data);
型
通过这种方式,我能够消除对Content-Length
头的需要,但请求仍然非常慢。
2条答案
按热度按时间bakd9h0s1#
有些服务器要求你设置内容长度,有些则不需要。这主要是为了让它的缓冲区建立在这个基础上。
您不应该添加0作为内容长度,而是将发送的数据量。如果您将其设置为0,某些服务器将拒绝加载它。
我猜发生的是因为你把它设置为0,它会以字节/字节的速度读取内容,这显然非常慢。
sg2wtvxw2#
curl CLI中的缓慢似乎是由curl在POST请求中发送的HTTP标头
Expect: 100-continue
引起的。要禁用它,请在传递其他参数之前使用
curl -H "Expect:"
。