有时候我们在使用PHP的CURL进行模拟POST提交时,会发现本地host指向的ip域名无法成功,这个时候我们就需要通过配置CURL的CURLOPT_HTTPHEADER来支持host指向的本地域名访问。
一、首先写一个调用CURL的函数为:
/**
* php模拟post请求
* @param $url string //请求地址,本地host指向时域名改成host指向的ip
* @pram $data array //参数
* @param $httpHeader array //本地调试时设置的http head参数,数组形式如:array(‘Host: api.caizhichao.cn’)
* @return json
*/
function curl_post($url,$data,$httpHeader='')
{
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_USERAGENT,$_SERVER['HTTP_USER_AGENT']);
if(!empty($httpHeader) && is_array($httpHeader))
{
curl_setopt($ch, CURLOPT_HTTPHEADER, $httpHeader);
}
$tmpInfo = curl_exec($ch);
if (curl_errno($ch)) {
echo 'error:'.curl_error($ch);
}
curl_close($ch);
return $tmpInfo;
}
注意看上面方法的注释!!!
二、改动
例如我们在本地Host指向的域名和ip是:
127.0.0.1 api.caizhichao.cn
(或者192.168.1.1 api.caizhichao.cn 等这些你本地的IP指向)
api的url地址是:
http://api.caizhichao.cn/notice/
现在改成:
http://127.0.0.1/notice/
httpHeader参数为:
array(“Host: api.caizhichao.cn”);
三、实例
具体调用的代码示例:(原本调用url为http://api.caizhichao.cn/notice/)
$url = 'http://127.0.0.1/notice/';
$data = array('id'=>100);
$host = array("Host: api.caizhichao.cn");
$info = $this->curl_post($url, $data, $host);