文档章节

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

宇哲不犹豫
 宇哲不犹豫
发布于 2015/10/13 11:05
字数 324
阅读 616
收藏 2

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



© 著作权归作者所有

共有 人打赏支持
上一篇: 初入symfont
宇哲不犹豫
粉丝 0
博文 44
码字总数 18225
作品 0
汕尾
程序员
私信 提问
Rolling cURL: PHP并发最佳实践

在实际项目或者自己编写小工具(比如新闻聚合,商品价格监控,比价)的过程中, 通常需要从第3方网站或者API接口获取数据, 在需要处理1个URL队列时, 为了提高性能, 可以采用cURL提供的curl_multi_...

鉴客
2012/06/19
4.9K
10
libcurl库介绍

libcurl库是一个实现了各种客户端协议的网络编程库。目前它支持12种以上的协议,包括 FTP、HTTP、Telnet以及其他安全变体。 如果您有 10 年以上的脚本语言经验,您就会注意到它们的标记有很大...

鉴客
2010/05/18
6K
4
PHP Curl并行轮转请求库--CurlFuture

CurlFuture : PHP Curl并行轮转请求库 multicurl系列方法是提高php请求后端http接口的一种途径。但是直接使用的话,存在几方面问题: 部分版本的curl扩展有bug,需要用特定的方式来调用(Ro...

coooold
2016/03/09
507
0
使用 cURL 和 libcurl 通过 Internet 进行对话

cURL 是一个命令行工具,可以对文件传输使用许多协议,包括 HTTP、FTP、Secure Copy (SCP)、Telnet 等等。但是,除了可以用命令行通过 Internet 与端点对话外,还可以使用 libcurl 编写简单或...

红薯
2009/11/02
1K
0
linux c libcurl的简单使用

curl是Linux下一个非常著名的下载库,通过这个库,可以很简单的实现文件的下载等操作。 看一个简单的例子: #include <curl/curl.h> #include <stdio.h> #include <string.h> CURL *curl; CU......

JORDANSG
2012/12/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

git 常用命令

本文档适合有一定git使用基础的用户,当使用时忘记使用命令可以起参考作用,新手请移步其他详细教程 下载安装 下载git完成之后,配置用户 $ git config --global user.name "Your Name"$ g...

杨鹏飞乀
11分钟前
3
0
返回历史页面,并刷新该历史页面

原来 还真的有 可以 返回历史 上一个页面,并刷新历史页面的 API的, 之前以为没有,所以只能每次返回 上一个页面的时候,都是直接 写上了 该页面的路径, 也就是直接去访问了。 而document....

之渊
13分钟前
1
0
MaxCompute新功能发布

2018年Q3 MaxCompute重磅发布了一系列新功能。 本文对主要新功能和增强功能进行了概述。 实时交互式查询:Lightning on MaxCompute 生态兼容:Spark on MaxCompute New SQL 新特性发布 Pyth...

阿里云云栖社区
14分钟前
3
0
PHP实现excel导入

1、前端写法 <input type="file" name="myfile" id="uploadingFiles" value="上传excel文件" /> <input type="text" name="mode" id="uploadingmode" value="" /> <button id="determin" cl......

葬-花
15分钟前
1
0
SpringBoot打jar包或war包获取不到资源文件解决办法

问题描述 在开发过程中我们经常会碰到要在代码中获取资源文件的情况,而我在最近将原有的Tomcat的原生项目迁移到SpringBoot项目中时碰到一个问题,就是在本地运行时,获取本地的xml资源文件是...

不学无数的程序员
21分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部