php 调用接口方式

来源:互联网 发布:linux添加中文输入法 编辑:程序博客网 时间:2024/04/29 05:01

1.一般常用方法 file_get_contents();

今天调用了一个反人类的接口,接口是get方式传输,里面有一个参数是当前时间,没错,不是时间戳,是当前格式化的时间:2017-8-9 11:18:25    (= =)一万个XXX。

然后用file_get_contents();去调用接口,结果调用失败,因为浏览器会自动将空格转义成%20  而函数却不会,所以调用不成功。(将接口链接直接输入在地址栏则成功调用,用函数则返回false)

然后date('Y-m-d%20H:i:s'); 再去调用,依然不成功。于是 就采用curl来调用接口了。

 

2.curl 调用接口(需要开启PHP curl支持)。

POST方式(未测试)

 

$url = 'http://yoururl';$post_data = array ("username" => "admin","key" => "12345");$ch = curl_init ();curl_setopt ( $ch, CURLOPT_URL, $url );curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );curl_setopt ( $ch, CURLOPT_CONNECTTIMEOUT, 10 );curl_setopt ( $ch, CURLOPT_POST, 1 ); //启用POST提交curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); //post的参数$file_contents = curl_exec ( $ch );curl_close ( $ch );

 php5.6以后 和5.6之前

兼容性上传文件 $curl = curl_init();                if (class_exists('\CURLFile')) {// 这里用特性检测判断php版本            curl_setopt($curl, CURLOPT_SAFE_UPLOAD, true);               $data = array('file' => new \CURLFile(realpath($source)));//>=5.5        } else {            if (defined('CURLOPT_SAFE_UPLOAD')) {                curl_setopt($curl, CURLOPT_SAFE_UPLOAD, false);            }            $data = array('file' => '@' . realpath($source));//<=5.5        }                curl_setopt($curl, CURLOPT_URL, $url);        curl_setopt($curl, CURLOPT_POST, 1 );        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);        curl_setopt($curl, CURLOPT_USERAGENT,"TEST");        $result = curl_exec($curl);        $error = curl_error($curl);

 

GET方式(亲测可用)

$url = 'http://yoururl';$ch = curl_init();//初始化curl_setopt($ch, CURLOPT_URL, $url);//设置选项curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_HEADER, 0);$file_contents = curl_exec($ch);//执行并获取HTML文档内容curl_close($ch);//释放curl句柄print_r($file_contents);//打印获得的数据

http://php.net/manual/zh/function.curl-setopt.php  (参数请参考官网)

http://www.jb51.net/article/33383.htm  另一个网站

参数:

CURLOPT_URL            需要获取的url地址
CURLOPT_RETURNTRANSFER 将curl_exec()获取的信息以字符串返回,而不是直接输出。// TRUE(1)一般为1
CURLOPT_HEADER         启用时会将头文件的信息作为数据流输出。   //false(0)一般设为0
CURLOPT_CONNECTTIMEOUT 在尝试连接时等待的秒数。设置为0,则无限等待。
CURLOPT_POST            TRUE 时会发送 POST 请求,类型为:application/x-www-form-urlencoded,是 HTML 表单提交时最常见的一种。
CURLOPT_POSTFIELDS     全部数据使用HTTP协议中的 "POST" 操作来发送。
    要发送文件,在文件名前面加上@前缀并使用完整路径。 文件类型可在文件名后以 ';type=mimetype' 的格式指定。
    这个参数可以是 urlencoded 后的字符串,类似'para1=val1&para2=val2&...',也可以使用一个以字段名为键值,字段数据为值的数组。
    如果value是一个数组,Content-Type头将会被设置成multipart/form-data。
    从 PHP 5.2.0 开始,使用 @ 前缀传递文件时,value 必须是个数组。
    从 PHP 5.5.0 开始, @ 前缀已被废弃,文件可通过 CURLFile 发送。
    设置 CURLOPT_SAFE_UPLOAD 为 TRUE 可禁用 @ 前缀发送文件,以增加安全性。

原创粉丝点击