我希望使用Streamable API和PHP和cURL构建视频上传。 https://streamable.com/documentation#upload-video-file
我想要完成的是:
我成功地通过终端使用curl命令尝试了。但是,我在通过php表单提交中解决问题时遇到了问题。
这是我在终端上传时使用的命令示例,该命令有效:
curl https://api.streamable.com/upload -u my_email:my_pass -F file=@path/to/file.mp4
使用PHP,我有一个非常简单的cURL脚本,这要归功于大量的在线帮助。我想你可以说我对使用cURL很陌生。
$url = 'https://api.streamable.com/upload -u my_email.com:my_pass -F file=@path/to/file.mp4';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$server_output = curl_exec ($ch);
curl_close ($ch);
有了这个,我收到了HTTP 400错误。 https://streamable.com/documentation#errors
.. 400范围内的代码表示客户端错误......
我想那是什么让我搞砸了?
我试过这种方式,但我得到同样的错误。
$pass = 'my_email:my_pass';
$postFields = array(
'file' => '/path/to/file.mp4',
'title' => 'Example Title'
);
$url = 'https://api.streamable.com/upload';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_USERPWD, $pass);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$server_output = curl_exec ($ch);
curl_close ($ch);
我使用print_r(curl_getinfo($ch));
查看发生了什么,这就是它正在吐出的内容 - 这可能对某些帮助有用:
Array ( [url] => https://api.streamable.com/upload
-u my_email:my_pass -F file=@/Path/to/file.mp4 [content_type] => [http_code] => 400 [header_size] => 66 [request_size] => 277 [filetime] => -1 [ssl_verify_result] => 0 [redirect_count] => 0 [total_time] => 0.36033 [namelookup_time] => 0.00138 [connect_time] => 0.082871 [pretransfer_time] => 0.283219 [size_upload] => 0 [size_download] => 0 [speed_download] => 0 [speed_upload] => 0 [download_content_length] => 0 [upload_content_length] => 275 [starttransfer_time] => 0.36031 [redirect_time] => 0 [redirect_url] => [primary_ip] => xx.xx.xxx.xxx [certinfo] => Array ( ) [primary_port] => 443 [local_ip] => 192.168.0.1 [local_port] => 57288 )
我希望有人可以帮助我解决这个问题,或者至少帮助我理解我可能需要从这里做些什么。正如我所说,我对cURL很新,所以如果我不清楚我在这里问什么,我会提前道歉。
谢谢!
答案 0 :(得分:2)
您需要在此处更改一些内容:
将CURLOPT_SSL_VERIFYPEER
设为false
。它可用于验证同行的证书。如果我们将其指定为false,它将接受任何服务器(对等)证书。
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
以下是关于启用和关闭CURLOPT_SSL_VERIFYPEER
, If CURLOPT_SSL_VERIFYPEER is false, is the data transfer no longer secure?
CURLOPT_POSTFIELDS
用于指定我们要通过POST请求提交的完整数据。应使用http_build_query()
函数将$postFields
数组转换为URL编码的查询字符串,以便将其作为application/x-www-form-urlencoded
发送。
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postFields));
答案 1 :(得分:0)
试试这个:
$fields = array("file"=>curl_file_create("video.mp4"));
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.streamable.com/upload");
curl_setopt($ch, CURLOPT_USERPWD, "email:pass");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields );
$result = curl_exec($ch);
我认为 curl_file_create 制作技巧,似乎使用@fileName不再为PHP 5.5 +工作