您的位置:首页 > 编程语言 > PHP开发

使用 curl 调接口时需要注意事项

2015-10-13 11:05 761 查看
1、在调用时需要对各个参数进行 urlencode;

2、注意 header 参数,首先我们使用 postman 工具调用一下这个接口,并获取其 request 的 header 将有用的 header 用起来(多试几次);

3、注意不同版本的 php 文件上传是需要的配置。

代码分析

/**
* 注意:1、参数除了文件都要 urlencode 一下;2、注意header;3、curl_file_create 函数
* @param $File  文件路径
* @param int $Level
* @param string $convertType
* @return bool
*/
public static function file2jpeg($File,$Level = 2,$convertType = "GHOSTSCRIPT" ){
$FileName = urlencode(basename($File));
$url = "http://******";
$curl = \Request::forge($url, 'curl');
\Fuel\Core\Log::debug("url1 = [ $url ]");
// 有用的 header
$header = array (
"User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.155 Safari/537.36",
);
// 所需的参数
$field = array(
'File' => Service_Util::curl_file_create($File),
'Level' => urlencode($Level),
"convertType"=>urlencode($convertType),
"FileName" => urlencode($FileName)
);
\Fuel\Core\Log::debug("url2 = [ $url ]");
// 配置
$curl->set_options(array(
CURLOPT_RETURNTRANSFER=>1,
CURLOPT_POST=>true,
CURLOPT_HTTPHEADER => $header,
CURLOPT_POSTFIELDS=>$field,
CURLOPT_INFILESIZE=>filesize($File)
));
$result = $curl->execute();
$dir = \Fuel\Core\Config::get('file_store_dir');
$path =  Service_Util::getName($dir."/".$field['FileName']);
file_put_contents($path.".zip",$result);
return true;
}

/**
* 去除文件后缀
* @param $fileName 文件
*/
public static function getName($fileName){
$index = strrpos($fileName,".");
if ($index>0){
return substr($fileName,0,$index);
}
return $fileName;
}
/**
* curl 文件上传兼容函数
* @param $filename
* @param string $contentType
* @return CURLFile|string
*/
public static  function curl_file_create($filename, $contentType = '') {
if (function_exists('curl_file_create')) {
return curl_file_create($filename, $contentType, basename($filename));
}
$value = "@{$filename};filename=" . basename($filename);
if ($contentType) {
$value .= ';type=' . $contentType;
}
return $value;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  fuelphp curl 上传文件