文档章节

CURL请求

峰show
 峰show
发布于 2016/02/03 14:30
字数 430
阅读 4
收藏 0
点赞 1
评论 0
<?php
    /**
     *   发起一个HTTP(S)请求,并返回json格式的响应数据
     *   @param array 错误信息  array($errorCode, $errorMessage)
     *   @param string 请求Url
     *   @param array 请求参数
     *   @param string 请求类型(GET|POST)
     *   @param int 超时时间
     *   @param array 额外配置
     *   
     *   @return array
     */ 
    public function curl_request_json(&$error, $url, $param = array(), $method = 'GET', $timeout = 10, $exOptions = null) {
        $error = false;
        $responseText = curl_request_text($error, $url, $param, $method, $timeout, $exOptions);
        $response = null;
        if ($error == false && $responseText > 0) {
            $response = json_decode($responseText, true);

            if ($response == null) {
                $error = array('errorCode'=>-1, 'errorMessage'=>'json decode fail', 'responseText'=>$responseText);
                //将错误信息记录日志文件里
                $logText = "json decode fail : $url";
                if (!empty($param)) {
                    $logText .= ", param=".json_encode($param);
                }
                $logText .= ", responseText=$responseText";
                file_put_contents("/data/error.log", $logText);
            }
        }
        return $response;
    }

    /**
    *  发起一个HTTP(S)请求,并返回响应文本
    *   @param array 错误信息  array($errorCode, $errorMessage)
    *   @param string 请求Url
    *   @param array 请求参数
    *   @param string 请求类型(GET|POST)
    *   @param int 超时时间
    *   @param array 额外配置
    *   
    *   @return string
    */
    public function curl_request_text(&$error, $url, $param = array(), $method = 'GET', $timeout = 15, $exOptions = NULL) {
        //判断是否开启了curl扩展
        if (!function_exists('curl_init')) exit('please open this curl extension');

        //将请求方法变大写
        $method = strtoupper($method);

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
        curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($ch, CURLOPT_HEADER, false);
        if (isset($_SERVER['HTTP_USER_AGENT'])) curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
        if (isset($_SERVER['HTTP_REFERER'])) curl_setopt($ch, CURLOPT_REFERER, $_SERVER['HTTP_REFERER']);
        curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
        switch ($method) {
            case 'POST':
                curl_setopt($ch, CURLOPT_POST, true);
                if (!empty($param)) {
                    curl_setopt($ch, CURLOPT_POSTFIELDS, (is_array($param)) ? http_build_query($param) : $param);
                }
                break;
            
            case 'GET':
            case 'DELETE':
                if ($method == 'DELETE') {
                    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
                }
                if (!empty($param)) {
                    $url = $url.(strpos($url, '?') ? '&' : '?').(is_array($param) ? http_build_query($param) : $param);
                }
                break;
        }
        curl_setopt($ch, CURLINFO_HEADER_OUT, true);
        curl_setopt($ch, CURLOPT_URL, $url);
        //设置额外配置
        if (!empty($exOptions)) {
            foreach ($exOptions as $k => $v) {
                curl_setopt($ch, $k, $v);
            }
        }
        $response = curl_exec($ch);

        $error = false;
        //看是否有报错
        $errorCode = curl_errno($ch);
        if ($errorCode) {
            $errorMessage = curl_error($ch);
            $error = array('errorCode'=>$errorCode, 'errorMessage'=>$errorMessage);
            //将报错写入日志文件里
            $logText = "$method $url: [$errorCode]$errorMessage";
            if (!empty($param)) $logText .= ",$param".json_encode($param);
            file_put_contents('/data/error.log', $logText);
        }

        curl_close($ch);

        return $response;



    }













?>

获取用户信息的自定义函数


© 著作权归作者所有

共有 人打赏支持
峰show
粉丝 12
博文 47
码字总数 6915
作品 0
广州
程序员
php中curl_multi函数集的用法

一、引言 这段时间比较忙,已经很久没有写博客了。今天我就来聊聊我关于curlmulti*函数集的使用心得,关于http请求的问题。 当我们用户php发起一个http请求的时候。我们会首先想到用什么?没...

林湾村龙猫 ⋅ 2016/11/28 ⋅ 0

php之curl实现http与https请求的方法

这篇文章主要介绍了php之curl实现http与https请求的方法,分别讲述了PHP访问http网页与访问https网页的实例,以及相关的注意事项,需要的朋友可以参考下。 本文实例讲述了php之curl实现http与h...

Corwien ⋅ 2016/05/18 ⋅ 0

curl 获取 https 请求方法

curl 获取 https 请求方法 今日在做一个项目,需要curl获取第三方的API,对方的API是https方式的。 之前使用curl能获取http请求,但今天获取https请求时,出现了以下的错误提示:证书验证失败...

蜗牛奔跑 ⋅ 2016/03/08 ⋅ 0

curl请求和浏览器请求有区别吗?

使用chrome的功能“copy as cURL(bash)”,把curl命令拷贝出来,用curl执行,不能得到正确的200响应,服务器返回401授权错误. 但用浏览器打开这个请求(在network标签页点击该请求)是一点问...

itwriter ⋅ 2017/01/19 ⋅ 4

微信第三方授权登录返回错误信息: 40029

微信第三方登录授权后,能获取到code码,但是获取gat_token()信息就会返回这样的错误信息: Array( ) 有问题,先查下官方的文档,熟悉下授权流程: 微信第三方授权登录文档:http://blog.csd...

Corwien ⋅ 2016/05/12 ⋅ 0

php curl返回false----curl调用微信创建自定义菜单返回false

在调用微信公众平台的创建自定义菜单接口来创建自定义菜单时遇到一个大坑,php curl返回false一直无法调试通过,代码如下: > //创建菜单 public function menucreate($data){ $url =" https...

wx599c47c7bdcad ⋅ 04/07 ⋅ 0

PHP也玩并发,巧用curl 并发减少后端访问时间

说明:本人源自3篇博文 http://blog.csdn.net/zuiaituantuan/article/details/7048782 首先,先了解下 php中的curl多线程函数: # curlmultiaddhandle # curlmulticlose # curlmultiexec # ......

晨曦之光 ⋅ 2012/03/09 ⋅ 0

fidder 抓包的问题

php的curl模拟post传递数据,据说,传的格式是键值对的话,他会自动转换成表单形式提交。我想验证,写了一个curl.php,里面就是curl 以post方式请求一个网站。 然后,我访问curl.php, 打开f...

plugin ⋅ 2015/10/11 ⋅ 7

PHP中fopen,file_get_contents,curl的区别

fopen /filegetcontents 每次请求都会重新做DNS查询,并不对 DNS信息进行缓存。但是CURL会自动对DNS信息进行缓存。对同一域名下的网页或者图片的请求只需要一次DNS查询。这大大减少了DNS查询...

Surjur ⋅ 2014/09/10 ⋅ 0

file_get_content 和curl以及fopen 谁的效率最高

三个函数虽然都是读取资源的函数,但各自的应用场景不同。 curl多用于互联网网页之间的抓取,fopen多用于读取文件,而filegetcontents多用于获取静态页面的内容。 1. fopen /filegetcontent...

范思哲思考者 ⋅ 2014/09/18 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JAVA RMI

什么是JAVA RMI Java RMI (Remote Method Invocation) 远程方法调用,能够让客户端像使用本地调用一样调用服务端 Java 虚拟机中的对象方法。RMI 是面向对象语言领域对 RPC (Remote Proced...

saulc ⋅ 25分钟前 ⋅ 0

Linux系统工程狮养成记

如今的社会,随着时代的发展,出现了很多职业,像电子类,计算机类的专业,出现了各种各样的工程师,有算法工程师,java工程师,前端工程师,后台工程师,Linux工程师,运维工程师等等,不同...

linux-tao ⋅ 36分钟前 ⋅ 0

进入编辑模式 vim命令模式 vim实践

1.

oschina130111 ⋅ 36分钟前 ⋅ 0

mysql用户管理、常用sql语句、mysql数据库备份恢复

1. mysql用户管理 mysql默认有一个root超级管理员账户,实际工作环境中不可能每个人都用此root权限,防止误操作、误删除,可以给单独的用户进行授权。 Mysql创建用户以及授权: grant all on...

laoba ⋅ 36分钟前 ⋅ 0

类型后面三个点(String...)和数组(String[])的区别

类型后面三个点(String…),是从Java 5开始,Java语言对方法参数支持一种新写法,叫可变长度参数列表,其语法就是类型后跟…,表示此处接受的参数为0到多个Object类型的对象,或者是一个Obj...

流氓兔- ⋅ 42分钟前 ⋅ 0

JEPLUS表格组件之表格合并——JEPLUS软件快速开发平台

JEPLUS表格组件之表格合并 我们在列表配置时会遇见这样的一种情况,需要对个人的数据进行统一化,对一些数据进行归类,这样展示出来美观又直观,在这篇笔记中我来给大家介绍下如何配置出来专...

JEPLUS ⋅ 43分钟前 ⋅ 0

golang 并发中全局唯一操作

package main// go 携程共享 数据// 加锁解锁操作// 同步锁import ("sync""fmt")// 创建Once结构var once = sync.Once{}func computed(data *int, lock *sync.Mut...

304158 ⋅ 44分钟前 ⋅ 0

Mobx入门之二:asynchronous actions

这一节主要看mobx怎么实现asynchronous actions 1 要实现的demo功能 输入地名,查询天气,利用openweathermap api 2 思想 observable观察数据:location地点、temperature温度 observer响应式...

pengqinmm ⋅ 46分钟前 ⋅ 0

【2018.0620学习笔记】【linux高级知识 13.4-13.6】

13.4 mysql用户管理 创建用户并授权: grant all on *.* to '用户名'@'ip' identified by '密码' //all是操作权限,*.*是库.表,指定格式是'用户名'@'localhost'才能用socket登录本地 gra...

lgsxp ⋅ 今天 ⋅ 0

Java强弱引用示例

package jdk;import java.lang.ref.PhantomReference;import java.lang.ref.ReferenceQueue;import java.lang.ref.SoftReference;import java.lang.ref.WeakReference;public ......

月下狼 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部