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.
这种方式跟第一种类似
- 最新评论