×

【已解决】Curl 上传文件时需要设置mime type

Falcon 2021-07-28 views:
摘要

正在生成中……

刚发现一个问题,使用curl上传文件的时候,如果不设置mime type,默认的是 application/octet-stream,也就是说如果不设置,就算你上传的文件是图片文件,它也会认为是二进制流,某些服务器如果有根据mime type进行过滤的操作,那这种文件就会被拒绝,别问我怎么知道的,我的服务器就是这样设置的。

指定mime type也很简单,比如指定 png 图片的ming-type :

Shell

curl -F 'file=@photo.png;type=image/png' https://example.com/myapi

 在PHP里可以这样写:

$mime_content_type = mime_content_type($img_path);
$mime_content_type = $mime_content_type == false ? 'image/jpeg' : $mime_content_type; // mime type 检测失败fallback到jpeg
$args['img'] =  new CURLFile($img_path,$mime_content_type);

Curl执行模拟提交:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_POSTFIELDS,$args);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);

$response = curl_exec($ch);
本文收录于