【问题标题】:PHP CURL PUT Equivalent to Command LinePHP CURL PUT 等价于命令行
【发布时间】:2016-03-24 17:07:03
【问题描述】:

我正在开发一个 PHP 网络服务,它将对应用程序 API 进行 REST 调用。我的网络服务建立在运行 ubuntu 的 LAMP 服务器上,以下命令在命令行中完美运行:

curl -k -u 用户名 -H "Content-type: application/xml" -X PUT -d @request.xml https://server/path/

但是,当我尝试在 PHP 中构建相同的请求时,我从 REST 服务器收到以下响应,表明 XML 丢失:

HTTP400文件过早结束。

这是我的 PHP 请求的代码:

$ch2 = curl_init($service_url);
$headers = array('Content-Type: application/xml', 'Accept: application/xml');
curl_setopt($ch2, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch2, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch2, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch2, CURLOPT_PUT, 1);
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch2, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch2, CURLOPT_POSTFIELDS, $xmlRequest);
curl_setopt($ch2, CURLOPT_USERPWD, 'user:password');
$curl_response = curl_exec($ch2);

我读过的所有内容都表明 CURLOPT_POSTFIELDS 是这样做的地方,但我认为这是为了添加“?”实际 URL 的变量。无论如何,任何帮助将不胜感激。

【问题讨论】:

  • man curl 并查看 -XPUT-d
  • 嗨 Sammitch,我正在寻找的是 PHP 等价物。不过我会检查一下。

标签: php xml curl


【解决方案1】:

根据manual,如果你使用CURLOPT_PUT,你还应该提供CURLOPT_INFILECURLOPT_INFILESIZE

也许不是

curl_setopt($ch2, CURLOPT_POSTFIELDS, $xmlRequest);

试试

curl_setopt($ch2, CURLOPT_INFILE, fopen('request.xml', 'r'));
curl_setopt($ch2, CURLOPT_INFILESIZE, filesize('request.xml'));

【讨论】:

  • 就是这样!谢谢!现在我需要弄清楚如何让它使用由代码而不是文件创建的 XML,但我相信这不会很难。
猜你喜欢
  • 2014-02-10
  • 1970-01-01
  • 2017-02-11
  • 2013-12-13
  • 1970-01-01
  • 1970-01-01
  • 2013-04-18
  • 2013-02-02
  • 1970-01-01
相关资源
最近更新 更多