如何获取对 Google Cloud Functions(不是 Firebase)的 HTTP 请求源的 IP 地址?

Posted

技术标签:

【中文标题】如何获取对 Google Cloud Functions(不是 Firebase)的 HTTP 请求源的 IP 地址?【英文标题】:How can I get the IP address of the source of a HTTP request to Google Cloud Functions (not Firebase)? 【发布时间】:2020-09-29 15:39:04 【问题描述】:

我有一个由 html 请求触发的 Google Cloud 函数。我需要获取源 IP 地址。我已经尝试打印整个请求参数,但它不存在。

有什么想法吗?

注意:这不是 How to get client IP address in a Firebase cloud function? 的副本。 Firebase Cloud Functions 的解决方案不适用于 Google Cloud Functions。

【问题讨论】:

您可以使用X-Forwarded-For 标头检索源IP 地址。因此,在Google Cloud Function 中,您可以使用请求对象来获取此标头。例如,您可以使用 urllib 在 Python 中获取 request.get_header() 我还发现你也可以使用request.headers.get("your-header-name")或简单地request.headers["your-header-name"]作为字典来获取Flask中的标题,甚至request.headers来获取所有这些,根据这个*** question 无论部署方式如何,云函数都以相同的方式工作。 gcloud 和 Firebase 部署的基础架构相同。事情改变的唯一方法是在函数前面有 Firebase 托管。是这样吗?请编辑问题以显示您收到的标头转储,说明事情没有按您预期的方式工作。 @Olav 你最终解决了这个问题吗? 【参考方案1】:

只需使用request.headers['x-forwarded-for']。 确保你没有在 ExpressJS 中使用任何中间件,因为 this

所以不要这样做:

const app = express()
const cors = require('cors')( origin: true )
app.use(cors)

app.use(require('body-parser').json())
app.use(express.json())
app.use(express.urlencoded( extended: false ))

就用这个吧:

const app = express()

【讨论】:

以上是关于如何获取对 Google Cloud Functions(不是 Firebase)的 HTTP 请求源的 IP 地址?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Google Python Client for Cloud Functions 获取 Google Cloud Functions 列表?

如何从 Google Cloud Storage 中获取特定对象元数据信息?

如何从 Google bigquery(google-cloud-ruby gem)的视图表(具有 resource_full)中获取数据

在 google-cloud-dataflow 中使用文件模式匹配时如何获取文件名

如何在 Google Cloud Function 上的 Spring Cloud 函数中获取 Pub/Sub 事件的元数据

如何从 Google Cloud 获取 p12 文件(key.p12)?