PHP CURL指定host内网通信

简介: PHP CURL指定host内网通信

场景是这样的

小马假设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是一个函数系列。

特别注意这两个函数。
image.png

我们注意到这里可以设置curl的各种请求参数,包括header请求头参数。
image.png

于是我们直接调用内网IP解决内网通信问题,用指定访问的host解决站点域名解析问题。参考代码如下:
image.png

于是我们怎么使用它呢?

$Data = ['id'=>1, 'name'=>'小马'];

curlHost('http://9.140.130.150/api/userList', $Data, 'Get');

这样就OK了。

附上CURL封装代码示例:

image.png

彩蛋时间:

1、如果获取通过header请求头参数传递的数据?

如PHP服务端取请求头参数Authorization,$_SERVER['HTTP_AUTHORIZATION']。

如果取body里的呢?$bodyData = @file_get_contents('php://input'); $bodyData = json_decode($bodyData,true); //将获取到的值转化为数组格式

2、为什么我们平时用$_POST就能取到body中的数据呢?如下:
image.png

开心一刻:
image.png

相关文章
|
5月前
|
JSON PHP 数据格式
PHP curl方法封装
PHP curl方法封装
31 0
|
2月前
|
PHP 数据格式
PHP 中的CURL 模拟表单的post提交
PHP 中的CURL 模拟表单的post提交
17 0
|
9月前
|
JSON PHP 数据格式
PHP curl方法封装
PHP curl方法封装
65 0
|
10月前
|
PHP
php函数file_get_contents无法获取到https链接内容问题使用curl的解决方案
php函数file_get_contents无法获取到https链接内容问题使用curl的解决方案
112 0
|
10月前
|
JSON API PHP
漏刻有时API接口实战开发系列(6):PHP开发API接口离不开的curl函数封装
漏刻有时API接口实战开发系列(6):PHP开发API接口离不开的curl函数封装
55 0
|
10月前
|
PHP
PHP CURL模拟百度网盘登陆
PHP CURL模拟百度网盘登陆
|
10月前
|
JSON 前端开发 PHP
PHP中使用CURL获得快递100API接口JSON数据的文件头处理方案
PHP中使用CURL获得快递100API接口JSON数据的文件头处理方案
73 0
|
11月前
|
PHP
PHP CURL中传递cookie的方法
PHP CURL中传递cookie的方法
|
11月前
|
PHP
PHP如何通过CURL上传文件
PHP如何通过CURL上传文件