【问题标题】:Set mime-type of multipart header in php curl without passing a file在 php curl 中设置多部分标头的 mime 类型而不传递文件
【发布时间】:2023-04-11 04:30:01
【问题描述】:

这可以吗?我看到像

这样的例子
curl_setopt($ch, CURLOPT_POSTFIELDS, array(
  'variable' => '@path/to/file;type=application/json'
));

但如果我将字符串作为变量值传递,我将无法设置此 mime 类型。我与之交互的 API 明确要求将此 mime 类型设置为 application/json,但除非我使用文件,否则我似乎无法使用 curl 库设置它。例如:

curl_setopt($ch, CURLOPT_POSTFIELDS, array(
  'variable' => 'json_string;type=application/json'
));

只输出一个带有 type=application/json 的字符串(这是有道理的),类似于

curl_setopt($ch, CURLOPT_POSTFIELDS, array(
  'variable' => sprintf('@%s;type=application/json', $json_string)
));

无法将任何内容传递给服务器,表面上是因为它找不到文件 (?)。

关于如何在不写出临时文件或编写我自己的帖子请求的情况下显式设置此 MIME 类型的任何想法?

【问题讨论】:

  • 您是否尝试过通过 CURLOPT_HTTPHEADER 设置 Content-Type 标头?
  • 没有 curl 我曾经使用header('content-type: application/json');更改了响应头的Content-Tyepe
  • @mario - 这设置了 HTTPHEADER 的内容类型,我需要设置单个表单元素的内容类型...
  • @SilentAssassin - 我需要在请求中更改表单元素的单个 mime 类型,没有响应,我是客户端,而不是服务器。
  • 好的,我明白了。然后你需要构造一个custom multipart/ payload。每个手工艺品都可以,但pear.php.net/package/Mail_Mime 也可能是一种选择(它不仅适用于邮件)。

标签: php rest curl


【解决方案1】:

您确定要在 postfield 中设置 mime-type 吗?

您可能希望像这样在 http-request-header 中设置它:

CURLOPT_HTTPHEADER => array('Content-Type: application/json'),

【讨论】:

  • 不,不幸的是,API 正在检查 HTTPHEADER 内容类型是否为“multipart/form-data”,并且单个 mime 类型是否为“application/json”。是的,他们都在检查。
猜你喜欢
  • 2018-11-07
  • 1970-01-01
  • 2015-06-16
  • 1970-01-01
  • 1970-01-01
  • 2013-01-20
  • 2016-04-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多