微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从请求中获取标头?

如何解决如何从请求中获取标头?

我正在尝试创建一个Webhook。我是Ruby的新手,但是正在设置一个非常简单的练习服务器。每次为我的github仓库之一创建新的问题/票证时,都会向我已设置为抓取有效负载的URL发出POST请求。我对此tutorial不太了解。

我可以使用以下代码访问发布在实际有效载荷/主体中的所有元素:

require 'sinatra'
require 'json'

post '/payload' do
    request.body.rewind
    payload_body = request.body.read
    puts payload_body

如何获取标头的内容?我一直在浏览文档,但是没有运气。我尝试通过responserequest.headers访问标头,但收到此错误NoMethodError - undefined method `headers' for #<Sinatra::Request:0x0000000006de49e0> 如果我在这里缺少东西,请告诉我。谢谢。

这是我的POST请求中的标头示例:

Request URL: http://505db39aa8ef.ngrok.io:
Request method: POST
Accept: */*
content-type: application/json
User-Agent: GitHub-Hookshot/cf3e7e0
X-GitHub-Delivery: 8d7fe080-ecc2-11ea-9b34-d35efaaf3885
X-GitHub-Event: issues
X-GitHub-Hook-ID: 245792914
X-GitHub-Hook-Installation-Target-ID: 279687508
X-GitHub-Hook-Installation-Target-Type: repository
X-Hub-Signature: sha1=ed12f9e7a31b08f9109557d6a9dd899ca85de9b5

解决方法

request.get_header('HTTP_X_GITHUB_HOOK_INSTALLATION_TARGET_TYPE')
# or
request.env['HTTP_X_GITHUB_HOOK_INSTALLATION_TARGET_TYPE']

值得一提的是,sinatra将处理自定义标头:

  • 添加前缀HTTP_
  • 将每个字母大写
  • gsub -_

您可以使用request.env访问所有标头。
有关将添加什么变量的详细信息,HTTP_您可以参考there

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。