如果某个域名对应多个ip,即有多台服务器。如何通过curl来访问指定一台服务器的url信息了。我们知道一般使用curl获取url信息的代码如下
$url="http://www.phper163.com/"; $ch=curl_init(); curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_TIMEOUT,5); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); $content=curl_exec($ch); echo $content;
如果想访问39.99.204.74这个ip服务器的内容了,可以将请求url中域名部分改用ip方式,并加上Host请求头信息。具体示例代码如下
$url='http://39.99.204.74/index.php';
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_TIMEOUT,5);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_HTTPHEADER,array("Host: www.phper163.com"));
$content=curl_exec($ch);
echo $content;
具体我们可以封装一个函数,方便调取,少量改动代码
function curlHttpRequest($url,$postdata=null,$httpheader=array(),$ip=null){
$ch = curl_init();
$timeout = 5;
if(!is_array($httpheader)){$httpheader=array();}
//如果ip指定,则请求url中域名变更为对应ip,并且设置 $httpheader变量值
if($ip){
$urlArr=parse_url($url);
$url=str_replace($urlArr['host'],$ip,$url);
array_unshift($httpheader,'Host: '.$urlArr['host']);
}
curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36');
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
if($postdata){
curl_setopt ( $ch, CURLOPT_POST, true);
curl_setopt ( $ch, CURLOPT_POSTFIELDS, $postdata);
}
if($httpheader){
curl_setopt($ch, CURLOPT_HTTPHEADER, $httpheader);
}
$contents = curl_exec($ch);
$status = curl_getinfo($ch);
if($status['http_code'] == 200){
return $contents;
}
return false;
}
发表评论 取消回复