php POST cURL请求执行缓慢

gk7wooem  于 2023-11-16  发布在  PHP
关注(0)|答案(2)|浏览(141)

我有一个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头的需要,但请求仍然非常慢。

bakd9h0s

bakd9h0s1#

有些服务器要求你设置内容长度,有些则不需要。这主要是为了让它的缓冲区建立在这个基础上。
您不应该添加0作为内容长度,而是将发送的数据量。如果您将其设置为0,某些服务器将拒绝加载它。
我猜发生的是因为你把它设置为0,它会以字节/字节的速度读取内容,这显然非常慢。

sg2wtvxw

sg2wtvxw2#

curl CLI中的缓慢似乎是由curl在POST请求中发送的HTTP标头Expect: 100-continue引起的。
要禁用它,请在传递其他参数之前使用curl -H "Expect:"

相关问题