首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >curl CLI与php curl

curl CLI与php curl
EN

Stack Overflow用户
提问于 2015-11-30 12:49:06
回答 1查看 317关注 0票数 0

我使用php curl已经有一段时间了,最近我偶然发现了一条Curl,我无法在PHP中工作。

CLI卷曲看起来如下:

代码语言:javascript
复制
curl -qgsSkH "Content-Type: multipart/form-data"
--no-progress-bar
--header "X-Api-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
-F "filename=@c/tmp/test.txt"
-F "options={\"application\":\"2\",\"timeout\":\"500\",\"priority\":\"0\"}"
https://xxxaddrxxx:443/API/vers1.0/sub

我使用以下PHP curl代码来模拟上面的curl:

代码语言:javascript
复制
$file = new CURLFile($fileEntry->getStoragePath());
$file->setMimeType($fileEntry->mime);
$file->setPostFilename($fileEntry->original_filename);

$data = array();
$data['options'] = json_encode($postData);
$data['filename'] = $file;

$headers = array();
$headers[] = "Content-Type: multipart/form-data";
$headers[] = 'X-FeApi-Token: '.$this->authToken;

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, TRUE);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLINFO_HEADER_OUT, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);

$curl_response = curl_exec($curl);

当我输出$data数组时,它将提供以下内容:

代码语言:javascript
复制
array:2 [
  "options" => "{"application":"2","priority":"0","timeout":"5000"}"
  "filename" => CURLFile {
    +name: "/etc/tmp/5645db226dbddINVOICE-722.doc"
    +mime: "application/msword"
    +postname: "INVOICE-722.doc"
  }
]

它是与我在代码中提供的内容相对应的所有正确数据。

无论如何,我试图推送文件和元数据的服务器也会以选项数组或文件名未指定或上传的错误来响应。只有当我在Linux服务器上运行原始curl命令时,尝试通过PHP时才会出现此错误--它工作得很好。

关于double -F选项,我是否犯了错误?或者,我是否忽略了新的CURLFile发布方法中的一些内容,因为在之前所有关于Stack的文章中,使用了使用“@”的弃用方法?

在调试时,curl cli命令和php curl的头部分似乎是相同的。由于ssl加密(https,不能在接收服务器上关闭),无法很容易地验证负载本身。

提前谢谢你。

G.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-10 11:20:23

这个问题是固定的。CURL工作得很好,这是供应商API集成,这并不是预期的那样。

它要求一个JSON选项变量,但是没有记录的是顺序是重要的,如果您请求一个JSON,这是完全不能接受的。

供应商将被告知并修补此问题,因为在进行详细调查时,解析JSON的方法可能会带来一些安全后果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33999070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档