摘要
正在生成中……
刚发现一个问题,使用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);