咨询一个关于 curl 上传多个文件的问题

2015-05-27 11:46:35 +08:00
 l12ab

这样的,我的目的是模拟一个html页面的表单提交。

对方网站提供了一个页面form表单,表单里有3个文件上传框
<input type="file" name="upload1">
<input type="file" name="upload2">
<input type="file" name="upload3">

我在页面上手工操作,只上传1个或者2个文件是没有问题的,但是我用php写了curl去提交,下面这样写post参数,只上传2个
$data = array("upload1"=>"@/file/path1", "upload2"=>"@/file/path2");

则对方服务器返回错误,意思就是无法读取文件内容;如果
$data = array("upload1"=>"@/file/path1", "upload2"=>"@/file/path2", "upload3"=>"");

也返回错误。

求如何只传1个或者2个文件

3566 次点击
所在节点    PHP
8 条回复
lilydjwg
2015-05-27 12:18:46 +08:00
1. 何不贴出可复现问题的完整代码?
2. 抓包看看。可选工具:mitmproxy、wireshark。
l12ab
2015-05-27 12:52:49 +08:00
@lilydjwg 因为是在内网的机器上测试,那台内网破机器只能IE6,于是就用httpwatch分析的,分析出来upload3没有值
fangjinmin
2015-05-27 12:59:47 +08:00
看看对方网页的JS,有可能对方的网页就没有提交upload3
l12ab
2015-05-27 15:00:03 +08:00
@fangjinmin 我不提交upload3就报错,提交个空值也报错,提交其他非文件的值也报错,只有提交一个文件才正常。
l12ab
2015-05-27 16:39:55 +08:00
OK 自己解决了,需要自行拼接post过去的header和content内容,具体情况可以搜一下这个别人写的函数curl_setopt_custom_postfields
lilydjwg
2015-05-27 19:15:54 +08:00
@l12ab 那个涉及到多个同名参数,你这个没关系的呀。
l12ab
2015-05-27 21:33:22 +08:00
@lilydjwg 是没关系,但是主要用到它拼接的request body
lilydjwg
2015-05-27 22:49:30 +08:00
@l12ab 哦。所以你绕过而不是解决了问题啦。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/194068

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX