使用 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 包)或引入axiosisomorphic-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 请求的主要内容,如果未能解决你的问题,请参考以下文章

电子邮件链接在非谷歌电子邮件客户端上不起作用

向非联系人发送谷歌群聊邀请

使用firebase云功能在特定时间发送FCM通知[重复]

如何使用 Firebase 云功能发送自定义电子邮件

从一个信号触发的 Firebase 云功能发送 voip 推送通知

在云功能 Firebase 中使用 SendGrid 发送交易电子邮件