关于php:将带有CURLOPT_POSTFIELDS的空文件字段发布到多部分表单中

Posting an empty filefield with CURLOPT_POSTFIELDS to multipart form

我正在尝试使用CURL CURLOPT_POSTFIELDS发布到多部分html表单,但是我无法找到如何在没有文件的情况下发布它。

在普通浏览器中测试表单时,"文件"字段可以为空,"名称"和"消息"不能为空。

这有效:

1
2
3
4
5
6
$array = array(
"Name" =>"Jon",
"Message" =>"My package was broken, please send new.",
"File" =>"@look_omg_its_broken_omgomg_look_at_the_corners.jpg"
);
curl_setopt ($ch, CURLOPT_POSTFIELDS, $array);

这不是:

1
2
3
4
5
6
7
$array = array(
"Name" =>"Jon",
"Message" =>"My package was broken, please send new.",
"File" =>""
);
curl_setopt ($ch, CURLOPT_POSTFIELDS, $array);
$output = curl_exec($ch);

最后的$ output结果为bool(false)
我也尝试过这些价值观的变化,但没有成功。

1
2
3
4
5
6
"File" =>"@"
"File" =>"@/"
"File" => NULL
"File"
"File" => array("")
"File" => array("filename" =>"")

有人知道吗?


如果没有重构后端或手动模拟多部分表单提交,我很确定您将无法仅凭任何CURLOPT_POSTFIELDS逻辑来解决您的问题,另请参见:

  • http_request_body_encode
  • 生成多部分边界
  • 用户级多部分/表单数据处理程序

如果您坚持尝试单独使用CURL解决此问题,建议您检查ext / curl源代码。


尝试仅完全删除File字段? 如果为空,不会提交?

1
2
3
4
5
6
$array = array(
"Name" =>"Jon",
"Message" =>"My package was broken, please send new."
);
curl_setopt ($ch, CURLOPT_POSTFIELDS, $array);
$output = curl_exec($ch);