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

本文深入探讨了PHP文件上传过程中需要注意的关键点,包括参数的urlencode处理、正确设置HTTP头、使用curl进行文件上传操作及配置注意事项。通过实例代码解析,详细展示了如何在实际应用中实现文件上传功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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



转载于:https://my.oschina.net/swchenyuzhe/blog/516211

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值