快捷搜索:   nginx

PHP CURL指定HOST IP 指定某个域名使用某个IP或者CNAME记录访问

我们遇到一个需求,客户有多台服务器,并做了域名指向多IP的操作,让来自不同地区的用户访问不同的服务器,从而实现个性化访问。现在需要使用PHP的CURL从这个域名的对应的某个地区的服务器抓取数据出来,这种一般普普通做好是在需要运行CURL 的服务器上设置下HOST,将这个要抓取的域名HOST指定到这个IP上就可以,但是这个客户是做站群,有很多域名都进行了这种操作,需要不定时的操作不同域名,因此去设置HOST很麻烦,其实这个可以使用PHP CURL自带的参数来解决,有好几个办法:

1、php curl 域名A记录解析到指定IP

使用CURLOPT_RESOLVE参数来实现,这个参数PHP CURL的手册好像都没介绍,但是实际是可以用的

实现代码如下:

<?php 
     $ch = curl_init(); 
     curl_setopt($ch, CURLOPT_URL, "http://dd.bnxb.com/1.html"); 
     curl_setopt($ch, CURLOPT_RESOLVE, ["dd.bnxb.com:80:1.0.0.1"]); 
     curl_setopt($ch, CURLOPT_HEADER, true); 
     curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:39.0) Gecko/20100101 Firefox/39.0');
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //如果把这行注释掉的话,就会直接输出 
     $result=curl_exec($ch); 
     curl_close($ch); 
     echo $result;
?>


dd.10.com:80:1.0.0.1 域名:端口:要指定的服务器IP


2、php curl 域名CNAME解析到指定域名

<?php 
     $ch = curl_init(); 
     curl_setopt($ch, CURLOPT_URL, "http://ddfj.bnxb.com/1.html"); 
     curl_setopt($ch, CURLOPT_HTTPHEADER, ["HOST:dd.bnxb.com"]);
     curl_setopt($ch, CURLOPT_HEADER, true); 
     curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:39.0) Gecko/20100101 Firefox/39.0');
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //如果把这行注释掉的话,就会直接输出 
     $result=curl_exec($ch); 
     curl_close($ch); 
     echo $result;
?>

也可以用于A记录指定IP

<?php 
     $ch = curl_init(); 
     curl_setopt($ch, CURLOPT_URL, "http://1.0.0.1/1.html"); 
     curl_setopt($ch, CURLOPT_HTTPHEADER, ["HOST:dd.bnxb.com"]);
     curl_setopt($ch, CURLOPT_HEADER, true); 
     curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:39.0) Gecko/20100101 Firefox/39.0');
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //如果把这行注释掉的话,就会直接输出 
     $result=curl_exec($ch); 
     curl_close($ch); 
     echo $result;
?>

这种方法是通过将 url scheme中的hostname部分换成目标域名地址,再在http头部指定Host来实现,类似NGINX/APACHE等实现虚拟主机的域名绑定方式。因为这种方式替换的HTTP的HOST部分,因此HTTPS的域名格式无法使用


3、使用CURLOPT_CONNECT_TO参数(PHP7.0开始支持)

CURLOPT_CONNECT_TO    Connect to a specific host and port instead of the URL's host and port. Accepts an array of strings with the format HOST:PORT:CONNECT-TO-HOST:CONNECT-TO-PORT.    Added in cURL 7.49.0. Available since PHP 7.0.7.  

这种方式跟第一种类似  

顶(0)
踩(1)

您可能还会对下面的文章感兴趣:

最新评论