php - 如何将 HTML 上传表单转换为 PHP/cURL 函数
问题描述
更新:滚动查看我的解决方案。
该站点具有API 访问权限,可以将文件直接上传到其服务器,我成功地使用 cURL post/get 执行所有 API 调用,但不幸的是,在上传阶段他只提供了 HTML 表单。
<form enctype="multipart/form-data" action="https://s1.youdbox.com/upload/01" method="post">
<input name="sess_id" value="3qr5wkukoy31pd1g">
<input name="file" type="file">
</form>
我尝试了很多次来弄清楚如何使用 cURL post 执行上传,但它总是失败但是当我创建一个 HTML 文件并使用上面的上传表单然后手动添加上传数据它成功并且工作正常
$ch1 = curl_init();
curl_setopt($ch1, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch1, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch1, CURLOPT_URL, $server_url);
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch1, CURLOPT_POST, 1);
$upload_data = array(
'sess_id' => $sesson_id,
#'file' => '@' .realpath('test.txt')
'file' => $file
);
$headers = array();
$headers[] = 'multipart/form-data';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch1, CURLOPT_POSTFIELDS, $upload_data);
$up_result = curl_exec($ch1);
if (curl_errno($ch1)) {
echo 'Error:' . curl_error($ch1);
}
curl_close($ch1);
var_dump($up_result);
解决方案
对于正在寻找有关此问题/问题的解决方案的人,这是我在调试和测试后得到的解决方案。
提示:在定义文件路径时不要使用“@”符号,因为 cURL 会处理它。
$file = '/path-to-your-file/test.txt';
$mime = mime_content_type($file);
$name = basename($file);
$url = 'https//example.com/api/url';
$data = curl_file_create($file, $mime, $name);
#$data = new CURLFile($file, $mime, $name); // uncomment if create method didn't work
$ch = curl_init();
// Don't do SSL verify or check (un-comment if you want it)
#curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
#curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
$post_field = array(
'key1' => 'value1',
'key2' => 'value2',
'file' => $data
);
$headers = array();
$headers[] = 'multipart/form-data';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_field);
$response = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close($ch);
$result = json_decode($response, true);
print_r($result);
推荐阅读
- prolog - 将数字列表翻译为 [1,2,3] 到 [一,二,三] 等单词时出现问题
- ipv4 - 启用 dhcp 的路由器如何处理静态 IP 地址机器?
- javascript - forEach 循环中的 NodeJs 函数需要在转到下一项之前完成
- ietf-netmod-yang - 为什么名称类型的叶节点在 yang 模型中不起作用?
- json - 如何将lua表对象解析为json?
- html - 以浮动外框为中心定位模态
- javascript - RXJS 去抖动和修改 BehaviourSubject
- javascript - 如何在 Javascript 中从 http 源返回图像
- supervisord - 错误:.ini 文件不包括 UBUNTU 中的 supervisorctl 部分
- java - 在 java android google map 中显示和更新标记的图标