博客列表 >CURL的host重写(RESOLVE)

CURL的host重写(RESOLVE)

我的博客
我的博客原创
2018年02月26日 19:52:022889浏览

设定情景:一个网站的域名(www.xxx.com)对应的公网ip是一个cdn的IP,但是你想访问该域名的真实IP;这样的情景我们就可以用curl中的CURLOPT_RESOLVE配置来重写host

自己写了一个函数供大家参考:

/**
 * 发送http请求方法,并且重写host
 * @param  string $url 请求URL
 * @param array $params 请求参数
 * @param  string $method 请求方法GET/POST
 * @param array $resolve 重写配置 (例如:array("www.haoxitong.com:443:192.168.78.128"))
 * @param array $header
 * @return array $data   响应数据
 * @throws Exception
 */

function curl_http_resolve($url, $params = array(), $method = 'GET',$resolve = null, $header = array() ){
    $opts = array(
        CURLOPT_TIMEOUT        => 300,
        CURLOPT_RETURNTRANSFER => 1,
        CURLOPT_SSL_VERIFYPEER => false,
        CURLOPT_SSL_VERIFYHOST => false,
        CURLOPT_CONNECTTIMEOUT => 100,
        CURLOPT_HTTPHEADER     => $header
    );
    if(!empty($resolve)){
        $opts[CURLOPT_RESOLVE] = $resolve;
    }
    /* 根据请求类型设置特定参数 */
    switch (strtoupper($method)) {
        case 'GET':
            $opts[CURLOPT_URL] = $url . '?' . http_build_query($params);
            break;
        case 'POST':
            //判断是否传输文件
            $params = http_build_query($params);
            $opts[CURLOPT_URL] = $url;
            $opts[CURLOPT_POST] = 1;
            $opts[CURLOPT_POSTFIELDS] = $params;
            break;
        default:
            throw new Exception('不支持的请求方式!');
    }
    /* 初始化并执行curl请求 */
    $ch = curl_init();
    curl_setopt_array($ch, $opts);
    $data  = curl_exec($ch);
    $error = curl_error($ch);
    curl_close($ch);
    if ($error) {
        throw new Exception('请求发生错误:' . $error);
    }
    return  $data;
}

注意:$resolve参数必须为数组,其值以域名、端口号、自定义ip,用冒号拼接

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议