如何将HTML上传表单转换为PHP/cURL函数

如何将HTML上传表单转换为PHP/cURL函数,php,api,Php,Api,更新:滚动查看我的解决方案。 这必须将文件直接上传到服务器 我成功地使用curlpost/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

更新:滚动查看我的解决方案。

这必须将文件直接上传到服务器 我成功地使用curlpost/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将处理它

$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);

这是一个示例,感谢您提供这个示例,但是这个方法适用于所有文件类型还是仅适用于图像?它适用于所有类型的请求。禁用curl verifypeer和verifyhost是不安全的,只应在测试时使用,而不应在实际产品中使用,这取决于您如何使用functionJust add处理请求
$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);