场景是这样的
小马假设A服务器放置了web站点如xx.xx.com,B服务器放置了需要访问A服务的API接口如xx.xx.com/api/userList。两台服务器都位于同一内网中。
A的IP为9.140.130.150,B的IP为9.140.130.151。此时如果B要发起对api访问,当然是直接CURL到地址xx.xx.com/api/userList,爽歪歪。但是如果要求内网通信呢?于是,就是9.140.130.150/api/userList,那么会发生什么?无法解析。因为web站点目录绑定了域名(如nginx配置),此时直接使用IP可能无法解析。那好办,改成xx.xx.com/api/userList调用呗。咦,好像哪里不对,这不又是回到外网方式访问么?一般是域名会先被DNS解析到外网IP。于是想起了我们本地开发时候使用的host配置。我们在B服务器配置域名的HOST?显然不合理。
那这个怎么搞?有没有最方便的解决方式。
CURL指定host内网通信
先来看一下PHP的CURL函数。注意PHP的curl是一个函数系列。
特别注意这两个函数。
我们注意到这里可以设置curl的各种请求参数,包括header请求头参数。
于是我们直接调用内网IP解决内网通信问题,用指定访问的host解决站点域名解析问题。参考代码如下:
于是我们怎么使用它呢?
$Data = ['id'=>1, 'name'=>'小马'];
curlHost('http://9.140.130.150/api/userList', $Data, 'Get');
这样就OK了。
附上CURL封装代码示例:
彩蛋时间:
1、如果获取通过header请求头参数传递的数据?
如PHP服务端取请求头参数Authorization,$_SERVER['HTTP_AUTHORIZATION']。
如果取body里的呢?$bodyData = @file_get_contents('php://input'); $bodyData = json_decode($bodyData,true); //将获取到的值转化为数组格式
2、为什么我们平时用$_POST就能取到body中的数据呢?如下:
开心一刻: