如何获取对 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 事件的元数据