将PHP cURL与可流化API一起使用时出现问题
我希望使用可流化的API和带有cURL的PHP构建一个视频上传 我想要实现的是:将PHP cURL与可流化API一起使用时出现问题,php,curl,Php,Curl,我希望使用可流化的API和带有cURL的PHP构建一个视频上传 我想要实现的是: 用户填写信息表格,并从计算机/设备中选择要上载的视频文件 提交表单,PHP从那里处理它,与Streamable API对话,通过表单将视频上传到我的Streamable帐户,然后从Streamable返回shortcode,让我将其与其他信息一起存储在MySQL数据库中 我尝试过通过终端使用curl命令,并取得了成功。但是,我在通过php表单提交实现它时遇到了一些问题 这是我在terminal中使用的上传命令的一个
curl https://api.streamable.com/upload -u my_email:my_pass -F file=@path/to/file.mp4
有了PHP,我有了一个非常简单的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错误。
..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))代码>查看发生了什么,这就是它所吐出的内容-也许这对一些帮助很有用:
数组([url]=>https://api.streamable.com/upload
-u my_email:my_pass-F file=@/Path/to/file.mp4[内容类型]=>[http_代码]=>400[标题大小]=>66[请求大小]=>277[文件时间]=>-1[ssl_验证结果]=>0[重定向计数]=>0[总时间]=>0.36033[姓名查找时间]=>0.00138[连接时间]=>0.082871[上传时间]=>0.283219[上传大小]=>0[下载速度]=>0[上传速度]=>0[下载内容长度]=>0[上传内容长度]=>275[开始传输时间]=>0.36031[重定向时间]=>0[重定向url]=>0[主ip]=>xx.xx.xxx.xxx[认证信息]=>Array()[主端口]=>443[本地ip]=>192.168.0.1[本地端口]=>57288)
这里有两件事需要更改:
- 将
CURLOPT\u SSL\u VERIFYPEER
设置为false
。它可用于验证对等方的证书。如果我们将其指定为false,它将接受任何服务器(对等方)证书
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
下面是一篇关于打开和关闭CURLOPT\u SSL\u VERIFYPEER
的重要文章,
CURLOPT_POSTFIELDS
用于指定我们希望随POST请求一起提交的完整数据。$POSTFIELDS
数组应使用函数转换为URL编码的查询字符串,以便将其作为application/x-www-form-urlencoded
发送
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postFields));
试试这个:
$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\u file\u create很好,似乎使用@fileName不再适用于PHP5.5+是否值得在这里添加一个关于关闭证书验证的安全含义的注释?这可能不是每个人都能看到的。@halfer啊,好主意,我也应该添加它。给我一点时间。编辑:更新答案。Tha我已经做了上面提到的更改(注意安全问题),但它给了我相同的结果。我停止使用POSTFIELDS选项,只使用了直线整行$url
选项。$url=str_replace(''%20','https://api.streamable.com/upload -u我的电子邮件:my_pass-F file=@/Path/to/file.mp4')$ch=curl\u init();curl\u setopt($ch,CURLOPT\u URL,$URL);curl\u setopt($ch,CURLOPT\u SSL\u VERIFYPEER,false);curl\u setopt($ch,CURLOPT\u CUSTOMREQUEST,“POST”);curl\u setopt($ch,CURLOPT\u RETURNTRANSFER,true);$server\u output=curl\u exec($ch);print\r(curl\u getinfo($ch));print\r(curl\u error($ch));print\r($server\u output);//这实际上在返回页上显示了可流式处理的404?curl_close($ch);
现在,当我在线阅读关于URL空白的内容时,使用str_replace
出现了404错误。可流式处理的404由输出打印的错误截图->