使用PHP cURL和Streamable API

时间:2017-07-05 17:14:44

标签: php api curl

我希望使用Streamable API和PHP和cURL构建视频上传。 https://streamable.com/documentation#upload-video-file

我想要完成的是:

  1. 用户填写信息表并从他们的计算机/设备中选择要上传的视频文件
  2. 提交表单,PHP从那里处理它以与Streamable API交谈以通过表单将视频上传到我的Streamable帐户,然后从Streamable返回短代码供我存储在MySQL数据库中,其余信息
  3. 我成功地通过终端使用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很新,所以如果我不清楚我在这里问什么,我会提前道歉。

    谢谢!

2 个答案:

答案 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 +工作