【问题标题】:cURL with PUT method带有 PUT 方法的 cURL
【发布时间】:2013-07-31 16:13:57
【问题描述】:

是否可以仅使用 URL 使用 PUT 方法进行 cURL 请求?这是我希望能够通过 PUT 方法使用 cURL 调用的 URL:
$url = https://url.net/card/activate.xml?card_id=1234567890&application_key=123123&accesskey=abcdef

我能够使用 REST 控制台(Chrome 扩展)使其工作,但不使用 cURL。我尝试将curl_setoptCURLOPT_PUTCURLOPT_INFILECURLOPT_INFILESIZE 一起使用,但我收到一个空白页面,根本没有任何响应。

这是我目前拥有的 headers 和 curl 选项:

$header[] = 'Authorization: Basic abc123';
$header[] = 'Accept: text/xml';

curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

$output = curl_exec($soap_do);

目前,使用这些设置,我收到 411 Length Required 错误。是否有可能让它像那样工作,还是我试图配置一些永远不会工作的东西?

【问题讨论】:

  • 可能是curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-length: 0'));? (或者更确切地说,添加到您现有的标题中)
  • 我在我的 headers 数组中添加了 Content-Length: 0 并且它起作用了。

标签: php curl


【解决方案1】:

HTTP 411 错误

Web 服务器(运行网站)认为客户端(例如您的 Web 浏览器或我们的 CheckUpDown 机器人)发送的 HTTP 数据流应该包含“内容长度”规范。这通常仅用于导致将数据放置在 Web 服务器上的 HTTP 方法,而不是从中检索数据。

您需要设置数据的内容长度

$header[] = 'Content-length: '.strlen($put_data);

或者如果您没有任何数据,只需将0 放在那里。

【讨论】:

  • 它通过在标题中设置 Content-Length: 0 来工作。我认为 Content-Length 被请求使用并且需要是发送数据的长度,否则它将不起作用。
猜你喜欢
  • 1970-01-01
  • 2019-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-26
  • 1970-01-01
  • 1970-01-01
  • 2013-03-09
相关资源
最近更新 更多