php curl抓取网页指定内容(私有云的IP,如上图箭头所于成功了吗?(组图) )
优采云 发布时间: 2021-12-20 03:18php curl抓取网页指定内容(私有云的IP,如上图箭头所于成功了吗?(组图)
)
在最近承接的一个项目中,需要使用curl在公有云阿里云中连接甲方的内网(私有云)域名,拉回用户积分等相关数据。方案草图如下,公有云和私有云之间通过专线连接。
问:是私有云中的域名。解析后的IP地址无法从外网访问。BUT解析为外网可访问的IP,所以curl傻傻的连接到这个IP上。
需求:curl("")——网络包发送到-->私有云IP,如上图箭头所示。
设想的解决方案:指定curl的dst主机ip地址
实践一:静态路由
更改/etc/hosts,添加一条记录
10.23.xx.xx
考虑到未来服务器数量的横向扩展,运维人员需要做代码部署以外的工作,很容易让人忘记这些步骤而不采用
实践二:PHP手册
在目前的PHP curl手册中,只能找到下图中的选项来实现相同的功能,但是需要PHP7,项目中使用的是PHP5.6。经过
练习三:思考
1) 记得终端下的curl命令有个--resolve选项可以指定目标IP
2) 我记得PHP接口的底层代码和C语言代码几乎一模一样。我查找了 /usr/include/curl/curl.h 文件并找到了它。
从这个C语言的宏可以看出,--resolve对应的选项常量的名字是CURLOPT_RESOLVE。我找了 PHP curl 文档,但我什至没有看到这个常量的定义。
仍然考虑到PHP接口的底层代码与C语言代码几乎一模一样,推测这个常量在PHP中也是同一个值。PHP文档虽然没有写,但是直接传入这个常识值应该是可以通过的。
编写如下实验代码,测试一下,还是成功了。
问题解决了~
----------------------------------------- 添加另一个方法----- ----------------------------------
该方法将url scheme中的hostname部分替换为目标IP地址,然后在http头中指定Host。
为什么这种方法可行?把它留给聪明的你来锻炼你的思维。
Answer Tips:考虑一下你在Apache/Nginx中是如何配置虚拟主机的,Host部分的作用是什么?
但是,是的,这是大写的。此方法仅对HTTP 100% 成功,对HTTPS 也是如此
嗯,跟证书签名里的主机名不符,太没感觉了,太安全了-->