php curl抓取网页指定内容(私有云的IP,如上图箭头所于成功了吗?(组图) )

优采云 发布时间: 2021-12-20 03:18

  php 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 也是如此

  

  嗯,跟证书签名里的主机名不符,太没感觉了,太安全了-->

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线