繁体   English   中英

PHP CURL PUT 等效于命令行

[英]PHP CURL PUT Equivalent to Command Line

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

curl -k -u username -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。 无论如何,任何帮助将不胜感激。

根据手册,如果你使用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'));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM