文档章节

CURL请求

热心市民陈先生
 热心市民陈先生
发布于 2016/02/03 14:30
字数 430
阅读 4
收藏 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;



    }













?>

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


© 著作权归作者所有

共有 人打赏支持
上一篇: 网上blog
下一篇: Git
热心市民陈先生
粉丝 12
博文 57
码字总数 6915
作品 0
广州
程序员
私信 提问
php中curl_multi函数集的用法

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

林湾村龙猫
2016/11/28
27
0
php之curl实现http与https请求的方法

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

Corwien
2016/05/18
83
0
curl 获取 https 请求方法

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

蜗牛奔跑
2016/03/08
43
0
curl请求和浏览器请求有区别吗?

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

itwriter
2017/01/19
2.2K
4
微信第三方授权登录返回错误信息: 40029

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

Corwien
2016/05/12
2.5K
0

没有更多内容

加载失败,请刷新页面

加载更多

RestClientUtil和ConfigRestClientUtil区别说明

RestClientUtil directly executes the DSL defined in the code. ConfigRestClientUtil gets the DSL defined in the configuration file by the DSL name and executes it. RestClientUtil......

bboss
今天
12
0

中国龙-扬科
昨天
2
0
Linux系统设置全局的默认网络代理

更改全局配置文件/etc/profile all_proxy="all_proxy=socks://rahowviahva.ml:80/"ftp_proxy="ftp_proxy=http://rahowviahva.ml:80/"http_proxy="http_proxy=http://rahowviahva.ml:80/"......

临江仙卜算子
昨天
9
0
java框架学习日志-6(bean作用域和自动装配)

本章补充bean的作用域和自动装配 bean作用域 之前提到可以用scope来设置单例模式 <bean id="type" class="cn.dota2.tpye.Type" scope="singleton"></bean> 除此之外还有几种用法 singleton:......

白话
昨天
8
0
在PC上测试移动端网站和模拟手机浏览器的5大方法

总结很全面,保存下来以备不时之需。原文地址:https://www.cnblogs.com/coolfeng/p/4708942.html

kitty1116
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部