使用 firebase 云功能向非谷歌服务器发送 GET 请求
Posted
技术标签:
【中文标题】使用 firebase 云功能向非谷歌服务器发送 GET 请求【英文标题】:Use firebase cloud function to send GET request to non-google server 【发布时间】:2019-12-25 02:42:42 【问题描述】:我正在设置 Firebase 云函数以对非 Google 服务进行 API 调用。对于测试,我使用 jsonplaceholder 作为 API。我收到的响应是 403 错误。
我已经查看了similar 的其他问题,但答案表明升级到付费 Firebase 帐户可以解决问题。升级到 blaze plan 后,我修复了 Firebase 阻止传出 http 调用的问题,但我现在遇到了我尝试从中发出请求的任何 API 返回的 403 错误。
import * as functions from 'firebase-functions';
const cors = require('cors')(origin: true);
export const getJson = functions.https.onRequest(async (req, res) =>
cors( req, res, async ()=>
try
let info = await req.get('https://jsonplaceholder.typicode.com/todos/1');
res.send(info);
catch (error)
res.status(500).send(`catch block hit: $error`);
)
)
我希望 API 调用返回一个 json 对象:
"userId": 1,
"id": 1,
"title": "delectus aut autem",
"completed": false
我收到的回复是:
"Failed to load resource: the server responded with a status of 403 ()"
注意:如果我从postman 生成get request,我可以收到预期的结果
感谢您的帮助,谢谢。
【问题讨论】:
How to fetch a URL with Google Cloud functions? request?的可能重复 在***.com/questions/56410014/…和***.com/questions/56867732/…也可以看到一些类似的答案 【参考方案1】:req
是发送到服务器的请求,req.get()
用于获取该请求的标头。如果你想提出一个请求,你需要自己触发。您可以使用原始节点(例如https
包)或引入axios
或isomorphic-fetch
之类的包来执行此操作。像这样的:
const functions = require('firebase-functions')
const axios = require('axios')
const cors = require('cors')( origin: true );
export const getJson = functions.https.onRequest(async (req, res) =>
cors( req, res, async ()=>
try
let info = await axios.get('https://jsonplaceholder.typicode.com/todos/1');
res.send(info.data);
catch (error)
res.status(500).send(`catch block hit: $error`);
)
)
【讨论】:
以上是关于使用 firebase 云功能向非谷歌服务器发送 GET 请求的主要内容,如果未能解决你的问题,请参考以下文章