php使用curl传视频或文件问题归纳

API对接中经常用到需要传文件给对方服务器,这里简单总结下常见问题。

使用示例:

$headers = ['Content-Type: application/x-www-form-urlencoded'];
$data = ['token'=>'1234', 'file'=>file_get_content('test.mp4')];
$post = http_build_query($data);

$curl = curl_init(); // 启动一个CURL会话
curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); // 从证书中检查SSL加密算法是否存在
curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转
curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer
curl_setopt($curl, CURLOPT_POST, 1); // 发送一个常规的Post请求
curl_setopt($curl, CURLOPT_POSTFIELDS, $post); // Post提交的数据包
curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环
curl_setopt($curl, CURLOPT_HEADER, 0); // 显示返回的Header区域内容
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($curl); // 执行操作
if (curl_errno($curl)) {
    echo 'Errno'.curl_error($curl);//捕抓异常
}
curl_close($curl); // 关闭CURL会话
echo($result);

一、数据格式问题

1.要想以 x-www-form-urlencoded 方式发送

可以通过上面示例设置 Header 头来设置。

2.以 multipart/form-data 方式发送

默认是不需要设置 Header 头,只需要把 $post 提交的数据设置为数组形式即可。

$headers =[];
$data = ['token'=>'1234','file'=>file_get_content('test.mp4')];
$post = $data;

3.以 json 格式发送

$headers =['Content-type: application/json'];
$data = ['token'=>'1234','file'=>file_get_content('test.mp4')];
$post = json_encode($data);

二、File 文件格式问题

1.原始文件形式

通常会直接读取

$data = ['token'=>'1234','file'=>file_get_content('test.mp4')];

2.Base64编码后发送

$data = ['token'=>'1234','file'=>base64_encode(file_get_content('test.mp4'))];

3.文件类型格式发送

$file_path = './test.mp4';
$file_type = mime_content_type($file_path);
$filename = basename($file_path);
$data = ['token'=>'1234','file'=>curl_file_create($file_path, $file_type, $filename)];
Author: thinkwei

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注