php - Linux cURL 与 PHP cURL - POST 请求

标签 php curl upload binary-data content-length

我必须使用 HTTPS 上传 ZIP 文件,这只能通过 Linux cURL 命令进行。我不明白我在 PHP cURL 请求中缺少什么......

Linux cURL [工作]:

curl -v -x http://api.test.sandbox.mobile.de:8080 -u USER:PASS -X POST --data-binary @502.zip https://services.mobile.de/upload-api/upload/502.zip

响应:

POST /upload-api/upload/502.zip HTTP/1.1
User-Agent: curl/7.38.0
Host: services.mobile.de
Accept: */*
Content-Length: 6026
Content-Type: application/x-www-form-urlencoded
Expect: 100-continue 
HTTP/1.1 100 Continue } [data not shown]
HTTP/1.1 201 Created 
Date: Tue, 06 Dec 2016 12:40:41 GMT 
Content-Type: text/html;charset=utf-8 
Vary: Accept-Encoding 
Transfer-Encoding: chunked

PHP cURL [不工作]:

$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  'Authorization: Basic '. base64_encode("USER:PASS"),
  'Content-Type: text/plain'
));
curl_setopt($ch,CURLOPT_PROXY, 'api.test.sandbox.mobile.de:8080');
curl_setopt($ch,CURLOPT_URL, 'https://services.mobile.de/upload-api/upload/502.zip');
curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch,CURLOPT_POST, 1);
curl_setopt($ch,CURLOPT_POSTFIELDS, [ 'file' => new CURLFile('502.zip') ]);
curl_setopt($ch,CURLOPT_VERBOSE, 1);
$result = curl_exec($ch);
curl_close($ch);

响应:

POST /upload-api/upload/502.zip HTTP/1.1
Host: services.mobile.de
Accept: */*
Content-Length: 6225
Expect: 100-continue
Content-Type: text/plain; boundary=------------------------835f6ea7                                                                                                                                                                                 5f783449
HTTP/1.1 100 Continue
HTTP/1.1 201 Created
Date: Tue, 06 Dec 2016 13:36:21 GMT
Content-Type: text/html;charset=utf-8
Vary: Accept-Encoding
Transfer-Encoding: chunked

现场文档是这样写的: “上传文件必须作为 HTTP-Payload 以二进制格式发送,不支持 Multipart 和 Encoding。” 我还注意到 Content-Length 不一样...为什么?

提前感谢您的建议!

最佳答案

摆脱线:

  'Content-Type: text/plain'

您正在为整条消息设置内容类型,但未正确格式化 POST 数据。

关于php - Linux cURL 与 PHP cURL - POST 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40997327/

相关文章:

javascript - 如何将 PHP 响应发送到 Ajax?

javascript - 如何从html选择选项onChange调用php函数?

php - 在 PHP 中加载服务器上的远程数据

python - 在一行的 cURL 命令上运行带有参数的 python

php - 错误101(net::ERR_CONNECTION_RESET):在PHP中

PhpStorm 将局部变量重构为类字段

c# - 如何使用 PHP 将 .NET 源文件编译为可执行文件?

rest - 使用 Wildfly 的简单 RESTful 端点

java - 输入流不起作用

python - 使用 Python Mechanize 上传文件