• php:如何在curl方式下url请求域名使用指定ip地址来访问某个服务器


            最近遇到一个问题,就是如何在curl请求某个域名的时候,可以指定某个ip访问,因为很多时候咱们的域名对应的是集群,会有很多服务器ip,并不一定是刚好访问到你想要的服务器,那么该如何解决呢?

    例如:正常情况下,假设我们这样发送请求,如何指定访问114.253.192.75这个ip服务器的内容

    1. $url = "https://www.diekaisanyue.com/";
    2. $ch = curl_init();
    3. curl_setopt($ch, CURLOPT_URL, $url);
    4. curl_setopt($ch, CURLOPT_TIMEOUT, 5);
    5. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    6. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); //https请求,不验证证书和hosts
    7. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    8. $content = curl_exec($ch);
    9. echo $content;

    解决方法:

    1、配置/etc/host文件,加入114.253.192.75 www.diekaisanyue.com的指向,虽然可以实现效果,但是不利于维护,换一个同事操作估计还不清楚已经配置host。

    2、修改在114.253.192.75服务器上部署的www.diekaisanyue.com vhost文件,单独开一个端口,例如端口8888,则我们可以直接使用114.253.192.75:8888进行访问,但是也不很方便,如果下次换一台服务器又需要开个端口配置一遍。

    3、将请求url中域名改用ip方式,然后加上Host请求头信息,进行请求,这种方法好处就是什么都不用修改,也不用配置,可以直接指定你想要的ip服务器进行访问,通过header里面的host信息,进行配对服务。

    1. $url = 'https://114.253.192.75/index.php';
    2. $ch = curl_init();
    3. curl_setopt($ch, CURLOPT_URL, $url);
    4. curl_setopt($ch, CURLOPT_TIMEOUT, 5);
    5. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    6. curl_setopt($ch, CURLOPT_HTTPHEADER, array("Host: www.diekaisanyue.com"));
    7. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    8. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    9. $content = curl_exec($ch);
    10. echo $content;

    4、php5.5以上版本,支持使用 CURLOPT_RESOLVE 来设置主机对应的ip地址,但是经过测试好像不起作用

    1. $url = 'https://www.diekaisanyue.com/index.php';
    2. $ch = curl_init();
    3. curl_setopt($ch, CURLOPT_URL, $url);
    4. curl_setopt($ch, CURLOPT_TIMEOUT, 5);
    5. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    6. curl_setopt($ch, CURLOPT_RESOLVE, ["www.diekaisanyue.com:443:114.253.192.75"]);
    7. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    8. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    9. $content = curl_exec($ch);
    10. echo $content;
  • 相关阅读:
    如何使用Gitlab搭建属于自己的代码管理平台
    【vue2第十四章】 插槽(普通插槽、具名插槽、作用域插槽语法)
    CA周记 - Build 2022 上开发者最应关注的七大方向主要技术更新
    Webmin--System and Server Status模块
    【C++基础】lambda表达式
    滑动窗口算法技巧
    Docker下Jenkins打包java项目并部署
    nacos - cloud 客户端服务注册
    ViewModel
    Docker安装Redis——下载Redis镜像——创建配置文件——创建容器实例并启动
  • 原文地址:https://blog.csdn.net/panjiapengfly/article/details/126914864