背景信息
云函数的出网IP是变化的,但一些三方系统,要求配置固定IP白名单,例如微信公众号开发get-access-token接口,此时需要提供在云函数中固定出网IP地址的能力。
实现原理
云函数入参ctx
提供对象httpProxyClient
,通过该对象发起的HTTP请求将会走代理服务器网络出口从而获得固定出网IP的能力。代理服务器当前限制仅支持weixin.qq.com。若开发者有其他域名代理需求,可提工单加白。
代理服务器IP列表如下,请将以下IP全部加入白名单配置:
47.92.132.2
47.92.152.34
47.92.87.58
47.92.207.183
8.142.185.204
使用方法
发送Get请求
用法
ctx.httpProxyClient.get(url: String, params: Object?, headers: Object?)
示例
const result = await ctx.httpProxyClient.get('https://api.weixin.qq.com/cgi-bin/token',
{
grant_type: 'client_credential',
appid: 'xxxx',
secret: 'xxxx'
}
)
// result 格式为字符串,需要做一次JSON解析
return JSON.parse(result)
输出如下:
{
"headers": {
"Connection": "keep-alive",
"Content-Type": "application/json; encoding=utf-8",
"Date": "Sat, 08 Oct 2022 11:52:20 GMT",
"Content-Length": "194"
},
"body": {
"access_token": "61_7kK2pb8ijdkz-********",
"expires_in": 7200
},
"statusCode": "OK",
"statusCodeValue": 200
}
重要
body的格式需要根据Content-Type判断,如果是application/json,则body为JSON格式,否则一律返回字符串格式。
POST 表单数据
用法
ctx.httpProxyClient.postForm(url: String, data: Object?, headers: Object?)
示例
ctx.httpProxyClient.postForm(
'https://www.example.com/search',
{
q: 'nodejs',
cat: '1001'
}
)
POST JSON 数据
用法
ctx.httpProxyClient.postJson(url: String, json: Object?, headers: Object?)
示例
ctx.httpProxyClient.postForm(
'https://www.example.com/search',
{
q: 'nodejs',
cat: '1001'
}
)
POST 通用数据
用法
ctx.httpProxyClient.post(url: String, text: String?, headers: Object?)
示例
ctx.httpProxyClient.post(
'https://www.example.com/search',
'abcdefg',
{
"Content-Type": "text/plain"
}
)
重要
请求默认超时时间为30000 毫秒。
暂不支持文件流类型以及multipart格式。
文档内容是否对您有帮助?