php之curl实现http请求(支持GET和POST)

php之curl实现http请求(支持GET和POST)

/**
 * curl实现http请求(支持GET和POST)
 * 作者:myth
 * function curl_request ($url[, $post=null, $timeout=10000, $config=array()])
 * @param $url      接口地址
 * @param $post     接口参数和值若为get方式则为空,默认为null
 * @param $timeout  超时时间,默认为10000
 * @param $config =     [
 *   //选填,头文件信息,默认看文档
 *   'httpheader'    =>    [
 *   //类型
 *   'Content-type: text/plain',
 *   //长度
 *   'Content-length: 100'
 *   ],
 *   //选填,用于伪装系统信息和浏览器信息
 *   'useragent'     =>    '',
 *   //选填,cookie信息
 *   'cookie'        =>    [],
 *   //是否输出数据流头文件信息
 *   'header'        =>    [],
 *   //是否进行编码
 *   'encoding'      =>    [
 *   //编码为
 *   'to'   =>   '',
 *   //原编码或者原编码的可能数组
 *   'from' =>   ''或者[]
 *   ],
 *   ]                配置信息默认为array()
 * @return array|bool|string
 */
function curl_request ($url, $post=null, $timeout=10000, $config=array()) {

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //返回原生的(Raw)输出
    curl_setopt($ch, CURLOPT_HEADER, false); //启用时会将头文件的信息作为数据流输出

    //设置https
    if (substr($url, 0, 5)=='https') {
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);//禁用后curl将终止从服务端进行验证
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    }

    //设置post内容
    if (!empty($post)) {
        if (!empty($config['encoding'])) {
            $post = mb_convert_encoding($post, $config['encoding']['from'], $config['encoding']['to']);
        }
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
    }

    //设置超时时间
    if (!empty($timeout)) {
        curl_setopt($ch, CURLOPT_NOSIGNAL, true);
        curl_setopt($ch, CURLOPT_TIMEOUT_MS, $timeout);
    }

    //设置httpheader
    if (!empty($config['httpheader'])) {
        curl_setopt($ch, CURLOPT_HTTPHEADER, $config['httpheader']);
    }

    //设置useragent
    if (!empty($config['useragent'])) {
        curl_setopt($ch, CURLOPT_USERAGENT, $config['useragent']);
    }

    //携带cookie访问
    if (!empty($config['cookie'])) {
        curl_setopt($ch, CURLOPT_COOKIE, $config['cookie']);
    }

    // 设置代理服务器(测试用)
    //curl_setopt($ch,CURLOPT_PROXY,'127.0.0.1:8888');

    //
    if (!empty($config['header']) || (isset($config['cookie']) && !empty($config['cookie']))) {
        curl_setopt($ch, CURLOPT_HEADER, true); //启用时会将头文件的信息作为数据流输出
        $content = curl_exec($ch);
        list($header, $body) = explode("\r\n\r\n", $content, 2); // 解析HTTP数据流
        preg_match("/set\-cookie:([^\r\n]*)/i", $header, $matches); // 解析COOKIE
        $cookie = $matches[1];
        $result = array('header'=>$header, 'cookie'=>$cookie, 'body'=>$body);
    } else {
        $result = curl_exec($ch);
    }

    curl_close($ch);

    //转换编码格式
    if (!empty($config['encoding'])) {
        if (is_array($result)) {
            foreach ($result as $k => $v) {
                $result[$k] = mb_convert_encoding($v, $config['encoding']['to'], $config['encoding']['from']);
            }
        } else {
            $result = mb_convert_encoding($result, $config['encoding']['to'], $config['encoding']['from']);
        }
    }

    return $result;
}

原文地址:https://www.cnblogs.com/littleelf/p/12287745.html

时间: 2024-10-14 06:07:06

php之curl实现http请求(支持GET和POST)的相关文章

php 利用curl发送post请求

利用curl发送post请求完成数据,接口的访问,这里面的参数可以修正一下,就可以写成可以支持文件上传的一个post请求,但是我这里不做仔细的写了.等以后有时间了在考虑怎么分解这个方法: /** * Curl版本 * 使用方法: * $post_string = "app=request&version=beta"; * request_by_curl('http://blog.snsgou.com/restServer.php', $post_string); */ func

php curl模拟post请求提交数据样例总结

在php中要模拟post请求数据提交我们会使用到curl函数,以下我来给大家举几个curl模拟post请求提交数据样例有须要的朋友可參考參考.注意:curl函数在php中默认是不被支持的,假设须要使用curl函数我们需在改一改 在php中要模拟post请求数据提交我们会使用到curl函数,以下我来给大家举几个curl模拟post请求提交数据样例有须要的朋友可參考參考. 注意:curl函数在php中默认是不被支持的,假设须要使用curl函数我们需在改一改你的php.ini文件的设置,找到php_c

php curl模拟post请求的例子

curl 在php中要模拟post请求数据提交我们会使用到curl函数,下面我来给大家举几个curl模拟post请求提交数据例子有需要的朋友可参考参考. 注意:curl函数在php中默认是不被支持的,如果需要使用curl函数我们需在改一改你的php.ini文件的设置,找到php_curl.dll去掉前面的";"就行了 例子1 <?php$uri = "http://tanteng.duapp.com/test.php";// 参数数组$data = array

php curl模拟post请求提交数据例子总结

php curl模拟post请求提交数据例子总结 [导读] 在php中要模拟post请求数据提交我们会使用到curl函数,下面我来给大家举几个curl模拟post请求提交数据例子有需要的朋友可参考参考.注意:curl函数在php中默认是不被支持的,如果需要使用curl函数我们需在改一改 在php中要模拟post请求数据提交我们会使用到curl函数,下面我来给大家举几个curl模拟post请求提交数据例子有需要的朋友可参考参考. 注意:curl函数在php中默认是不被支持的,如果需要使用curl函

php curl 模拟get请求 并设置header

1. 模拟get请求文件 test_get.php <?phperror_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED);function http_get($url){    $headers[] = "Content-type: application/x-www-form-urlencoded";    $headers[] = "Zoomkey-Auth-Token: 9CD0F0F60AFDF00&qu

用curl发起https请求

使用curl发起https请求 使用curl如果想发起的https请求正常的话有2种做法: 方法一.设定为不验证证书和host. 在执行curl_exec()之前.设置option $ch = curl_init(); ...... curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); 方法二.设定一个正确的证书. 本地ssl判别证书太旧,导致链接报错ssl

php curl模拟post请求提交数据

最近在做校园图书馆图书信息的采集程序,既然是图书馆图书的采集,肯定有提交搜索的页面,无非是post提交,让我想到了curl模拟提交,首先通过firebug进行抓包查询下post提交后的格式如下: txtWxlx=CN&hidWxlx=spanCNLx&txtPY=HZ&txtTm=%D2%F4%C0%D6&txtLx=%25&txtSearchType=1&nMaxCount=100&nSetPageSize=10&cSortFld=%D5%

用curl获取https请求

今天一个同事反映,使用curl发起https请求的时候报错:"SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed" 很明显,验证证书的时候出现了问题. 使用curl如果想发起的https请求正常的话有2种做法: 方法一.设定为不验证证书和host.

[PHP自动化-进阶]003.CURL处理Https请求访问

引言:继前文<模拟登录并采集数据>,<模拟登录带有验证码的网站>,大家对CURL基本上已经有了认识,这一讲简单的说一下请求Https. 在很多的站点,如TalkingData, BaiDu等等,一些请求协议都是走SSL,大白话来说就是Https,这种协议在模拟CURL时可能会出现请求不成功等等的问题. 下面为大家讲一下解决方案. 这一讲很简单,但能说明问题……. 异常提示 大多数异常信息提示如下:证书验证失败. SSL certificate problem, verify tha