Ruby on rails ruby会从响应中删除标题吗?
我直接从我的博客获取html内容,如下所示:Ruby on rails ruby会从响应中删除标题吗?,ruby-on-rails,ruby,Ruby On Rails,Ruby,我直接从我的博客获取html内容,如下所示: response = Net::HTTP.get_response(uri) respond_to do |format| format.html { render :text => response.body } end 虽然在博客引擎(WordPress)中,我添加了标题访问控制允许源代码:但我注意到它没有在响应中传递 然而,如果我使用邮递员获取页面或直接在浏览器中查看页面,我可以看到页眉在那里 编辑 我可以看到传递的其他标题,例如
response = Net::HTTP.get_response(uri)
respond_to do |format|
format.html { render :text => response.body }
end
虽然在博客引擎(WordPress)中,我添加了标题访问控制允许源代码:
但我注意到它没有在响应中传递
然而,如果我使用邮递员获取页面或直接在浏览器中查看页面,我可以看到页眉在那里
编辑
我可以看到传递的其他标题,例如:
cache-control: no-cache, must-revalidate, max-age=0
content-type: text/html; charset=UTF-8
date: Tue, 24 Jul 2018 06:37:57 GMT
expires: Wed, 11 Jan 1984 05:00:00 GMT
有什么想法吗?
响应。body
将返回您的身体部位,而不是标题
部位。您可以将响应转换为哈希并检查标题,如下所示:
> url = "https://stackoverflow.com/questions/51492025/does-ruby-strip-headers-from-response"
> uri = URI.parse(url)
> response = Net::HTTP.get_response(uri)
#=> #<Net::HTTPOK 200 OK readbody=true>
> response.to_hash
#=> {"cache-control"=>["private"], "content-type"=>["text/html; charset=utf-8"], "last-modified"=>["Tue, 24 Jul 2018 07:04:00 GMT"], "x-frame-options"=>["SAMEORIGIN"], "x-request-guid"=>["22a4b6b6-3039-46e2-b4de-c8af7cad6659"], "strict-transport-security"=>["max-age=15552000"], "content-security-policy"=>["upgrade-insecure-requests"], "accept-ranges"=>["bytes", "bytes"], "age"=>["0", "0"], "content-length"=>["31575"], "date"=>["Tue, 24 Jul 2018 07:04:46 GMT"], "via"=>["1.1 varnish"], "connection"=>["keep-alive"], "x-served-by"=>["cache-bom18221-BOM"], "x-cache"=>["MISS"], "x-cache-hits"=>["0"], "x-timer"=>["S1532415886.990199,VS0,VE280"], "vary"=>["Accept-Encoding,Fastly-SSL"], "x-dns-prefetch-control"=>["off"], "set-cookie"=>["prov=a7dfe911-76a1-f1c1-093b-3fc8fe79af65; domain=.stackoverflow.com; expires=Fri, 01-Jan-2055 00:00:00 GMT; path=/; HttpOnly"]}
有关更多详细信息,请阅读:
响应。body
将返回您的身体部位,而不是标题
部位。您可以将响应转换为哈希并检查标题,如下所示:
> url = "https://stackoverflow.com/questions/51492025/does-ruby-strip-headers-from-response"
> uri = URI.parse(url)
> response = Net::HTTP.get_response(uri)
#=> #<Net::HTTPOK 200 OK readbody=true>
> response.to_hash
#=> {"cache-control"=>["private"], "content-type"=>["text/html; charset=utf-8"], "last-modified"=>["Tue, 24 Jul 2018 07:04:00 GMT"], "x-frame-options"=>["SAMEORIGIN"], "x-request-guid"=>["22a4b6b6-3039-46e2-b4de-c8af7cad6659"], "strict-transport-security"=>["max-age=15552000"], "content-security-policy"=>["upgrade-insecure-requests"], "accept-ranges"=>["bytes", "bytes"], "age"=>["0", "0"], "content-length"=>["31575"], "date"=>["Tue, 24 Jul 2018 07:04:46 GMT"], "via"=>["1.1 varnish"], "connection"=>["keep-alive"], "x-served-by"=>["cache-bom18221-BOM"], "x-cache"=>["MISS"], "x-cache-hits"=>["0"], "x-timer"=>["S1532415886.990199,VS0,VE280"], "vary"=>["Accept-Encoding,Fastly-SSL"], "x-dns-prefetch-control"=>["off"], "set-cookie"=>["prov=a7dfe911-76a1-f1c1-093b-3fc8fe79af65; domain=.stackoverflow.com; expires=Fri, 01-Jan-2055 00:00:00 GMT; path=/; HttpOnly"]}
有关更多详细信息,请阅读:
Net::HTTPResponse
(这是您的响应
)混合在一起。因此,您可以将单个头作为response['Access-Control-Allow-Origin']
,使用response对其进行迭代。每个头都可以使用response,甚至可以使用response将它们全部作为散列来获取。to_hash
Net::HTTPResponse
(即您的响应
)混合在一起。因此,您可以获得一个单独的头作为response['Access-Control-Allow-Origin']
,使用response对其进行迭代。每个头都是response,甚至可以使用response将其作为一个散列来获取。如果您想通过从您要获取的主机提供服务的头,首先需要将博客中的响应隐藏在不同的变量名中。让我们称之为blog\u response
(这是因为response
是rails控制器实例中预先存在的特殊方法名)
然后,您需要从blog\u响应中获取您关心的标题,如下所示:
header_name, header_value = blog_response.each_header.find do |name, value|
name =~ /pattern-matching-a-header-name-i-care-about/i #case insensitive regex matching recommended for http headers
end
然后,在呈现响应之前,需要在控制器中设置它们,例如:
response.headers[header_name] = header_value
respond_to do |format|
format.html { render :text => blog_response.body }
end
这个示例显然只针对一个标题,但您可以通过在响应中迭代、匹配和设置多个标题来复制多个标题,如下所示:
blog_response.each_header.select do |name, value|
if name =~ /pattern-matching-header-names-i-care-about|some-other-pattern-i-care-about/i #case insensitive regex matching recommended for http headers
response.headers[name] = value
end
end
如果要传递所有标题,只需执行以下操作:
blog_response.each_header do |name, value|
response.headers[name] = value
end
respond_to do |format|
format.html { render :text => blog_response.body }
end
如果要传递从主机获取的消息头,首先需要将来自博客的响应存储在不同的变量名中。让我们称之为blog\u response
(这是因为response
是rails控制器实例中预先存在的特殊方法名)
然后,您需要从blog\u响应中获取您关心的标题,如下所示:
header_name, header_value = blog_response.each_header.find do |name, value|
name =~ /pattern-matching-a-header-name-i-care-about/i #case insensitive regex matching recommended for http headers
end
然后,在呈现响应之前,需要在控制器中设置它们,例如:
response.headers[header_name] = header_value
respond_to do |format|
format.html { render :text => blog_response.body }
end
这个示例显然只针对一个标题,但您可以通过在响应中迭代、匹配和设置多个标题来复制多个标题,如下所示:
blog_response.each_header.select do |name, value|
if name =~ /pattern-matching-header-names-i-care-about|some-other-pattern-i-care-about/i #case insensitive regex matching recommended for http headers
response.headers[name] = value
end
end
如果要传递所有标题,只需执行以下操作:
blog_response.each_header do |name, value|
response.headers[name] = value
end
respond_to do |format|
format.html { render :text => blog_response.body }
end
render text:response.body
不处理标题,因此它们仍然是Rails响应的“默认值”。您可以通过执行以下操作获取标题:Net::HTTP.head(uri)
render text:response.body
不处理标题,因此,它们仍然是Rails响应的“默认值”。您可以通过执行以下操作获取标题:Net::HTTP.head(uri)
response.to#hash
将列出所有标题,但如何呈现响应中的body+所有标题?response.to#hash.map{k,v |“{k}:{v}.join(“\n”)+“\n\n”+response.body
response.to#u hash
将列出所有头,但是如何在响应中呈现body+所有头?response.to_hash.map{k,v |“}:{k}:{v}。join(“\n”)+“\n\n”+response.body
response.to#u hash将列出所有头,但是如何呈现响应中的正文+所有标题?@simo在响应中添加新键,并将正文内容分配给它,如:response[“body\u part”]=response.body
然后选中response.to\u hash
response.to\u hash将列出所有标题,但是如何呈现响应中的正文+所有标题?@simo在响应中添加新键,并将正文内容分配给它,如:response[“body\u part”]=response.body
然后选中response.to_hash
完美答案!完美答案!