php抓取网页域名(私有云的IP,如上图箭头所于成功了吗?(组图) )
优采云 发布时间: 2022-01-13 07:06php抓取网页域名(私有云的IP,如上图箭头所于成功了吗?(组图)
)
在最近承接的一个项目中,需要使用公有云阿里云的域名将甲方的内网(私有云)与curl连接起来,检索用户积分等相关数据。方案*敏*感*词*如下,公有云和私有云之间通过专线连接。
问题:是私有云中的域名。解析的IP地址无法从外网访问。BUT被解析为外网可访问的IP,所以curl傻傻的连接到这个IP。
要求:curl("") -- 网络包发往 --> 私有云的IP,如上图中箭头所示。
预期的解决方案:指定 curl 的 dst 主机 ip addr
实践一:静态路由
更改 /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 header 中指定 Host。
为什么这种方法有效?把它留给聪明的你来锻炼你的思维。
回答Tips:考虑一下你在Apache/Nginx中是如何配置虚拟主机的,Host部分起什么作用呢?
但是,是的,它是大写的,这种方法对于 HTTP 只会 100% 成功,但对于 HTTPS
嗯,和证书签名里的主机名不匹配,太没良心了,太安全了 -->