Wistia:使用 curl 和 php 上传文件
Wistia : Uploading file using curl and php
我正在尝试使用 curl 和 php 将 mp4 文件上传到 Wistia 视频托管。但是我不断收到 500 服务器错误响应,即使所有参数似乎都很好。
这是我执行 curl 调用的代码:
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,);
curl_setopt($ch,CURLOPT_POST, true);
curl_setopt($ch,CURLOPT_POSTFIELDS,$params);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch,CURLOPT_HEADER,true);
//curl_setopt($ch,CURLOPT_HTTPHEADER, array('Content-Type: multipart/form-data'));
$result = curl_exec($ch);
$responseInfo = curl_getinfo($ch);
echo '<pre>'; print_r($responseInfo); exit;
$params
数组有两个索引,file
和 api_password
。
我将 $params
数组设置为:
$params = array('file'=>'@'.realpath('./wistiatest.mp4'),'api_password'=>'xxx');
并返回以下错误 (500):
Array
(
[url] => https://upload.wistia.com/
[content_type] => text/html;charset=utf-8
[http_code] => 500
[header_size] => 717
[request_size] => 186
[filetime] => -1
[ssl_verify_result] => 0
[redirect_count] => 0
[total_time] => 1.484906
[namelookup_time] => 0.004125
[connect_time] => 0.251725
[pretransfer_time] => 0.781186
[size_upload] => 416
[size_download] => 30
[speed_download] => 20
[speed_upload] => 280
[download_content_length] => 30
[upload_content_length] => 416
[starttransfer_time] => 1.034712
[redirect_time] => 0
[redirect_url] =>
[primary_ip] => 162.209.59.225
[certinfo] => Array
(
)
[primary_port] => 443
[local_ip] => 10.28.81.19
[local_port] => 47150
)
我也试过设置文件 type
和 filename
参数。但无济于事。
$param = array('file'=>'@'.$file.' ;type=application/octet-stream'.' ;filename=wistiatest.mp4','api_password'=>'xxx');
此外,即使我将数组参数传递给 CURLOPT_POSTFIELDS
,我也尝试将 Content-Type
header 显式设置为 multipart/form-data
但这也不起作用.
当您使用 multipart/form-data 发送 POST 请求时,需要 http_build_query() 函数。您不能简单地在 CURLOPT_POSTFIELDS.
中传递 PHP 数组
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
如果请求还是不行,可能是你的POST参数有误。
Wistia 的上传 API 可以在这里看到; http://wistia.com/doc/upload-api#the_request
尽管我已经使用 CURLFile but i still want to know why it does not work without it. Here 解决了问题,但我还是在其中找到了一个有用的 CURLFile 示例。
我正在尝试使用 curl 和 php 将 mp4 文件上传到 Wistia 视频托管。但是我不断收到 500 服务器错误响应,即使所有参数似乎都很好。
这是我执行 curl 调用的代码:
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,);
curl_setopt($ch,CURLOPT_POST, true);
curl_setopt($ch,CURLOPT_POSTFIELDS,$params);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch,CURLOPT_HEADER,true);
//curl_setopt($ch,CURLOPT_HTTPHEADER, array('Content-Type: multipart/form-data'));
$result = curl_exec($ch);
$responseInfo = curl_getinfo($ch);
echo '<pre>'; print_r($responseInfo); exit;
$params
数组有两个索引,file
和 api_password
。
我将 $params
数组设置为:
$params = array('file'=>'@'.realpath('./wistiatest.mp4'),'api_password'=>'xxx');
并返回以下错误 (500):
Array
(
[url] => https://upload.wistia.com/
[content_type] => text/html;charset=utf-8
[http_code] => 500
[header_size] => 717
[request_size] => 186
[filetime] => -1
[ssl_verify_result] => 0
[redirect_count] => 0
[total_time] => 1.484906
[namelookup_time] => 0.004125
[connect_time] => 0.251725
[pretransfer_time] => 0.781186
[size_upload] => 416
[size_download] => 30
[speed_download] => 20
[speed_upload] => 280
[download_content_length] => 30
[upload_content_length] => 416
[starttransfer_time] => 1.034712
[redirect_time] => 0
[redirect_url] =>
[primary_ip] => 162.209.59.225
[certinfo] => Array
(
)
[primary_port] => 443
[local_ip] => 10.28.81.19
[local_port] => 47150
)
我也试过设置文件 type
和 filename
参数。但无济于事。
$param = array('file'=>'@'.$file.' ;type=application/octet-stream'.' ;filename=wistiatest.mp4','api_password'=>'xxx');
此外,即使我将数组参数传递给 CURLOPT_POSTFIELDS
,我也尝试将 Content-Type
header 显式设置为 multipart/form-data
但这也不起作用.
当您使用 multipart/form-data 发送 POST 请求时,需要 http_build_query() 函数。您不能简单地在 CURLOPT_POSTFIELDS.
中传递 PHP 数组curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
如果请求还是不行,可能是你的POST参数有误。
Wistia 的上传 API 可以在这里看到; http://wistia.com/doc/upload-api#the_request
尽管我已经使用 CURLFile but i still want to know why it does not work without it. Here 解决了问题,但我还是在其中找到了一个有用的 CURLFile 示例。