码迷,mamicode.com
首页 > Web开发 > 详细

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

时间:2015-10-13 12:29:02      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:

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;
}



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

标签:

原文地址:http://my.oschina.net/swchenyuzhe/blog/516211

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!