使用 curl 调接口时需要注意事项
使用 curl 调接口时需要注意事项
宇哲不犹豫 发表于3年前
使用 curl 调接口时需要注意事项
  • 发表于 3年前
  • 阅读 613
  • 收藏 2
  • 点赞 0
  • 评论 0

移动开发云端新模式探索实践 >>>   

摘要: curl 调接口,这里只是一个例子

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



  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 0
博文 31
码字总数 18225
×
宇哲不犹豫
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: