[英]Ruby rest-client “Accept” Header issue
我正在嘗試使用Ruby rest-client gem,可以這么說。 我注意到,當我點擊某個應返回HTML的URL時,除非我特別指定,否則會出現404錯誤:
RestClient.get('http://www.example.com/path/path', accept: 'text/html')
但是,在沒有顯式指定Accept
標頭的情況下 ,我訪問的幾乎所有其他頁面都可以返回HTML。
我查看了位於此處的Request
對象的源,並且在第486行的default_headers
方法中,似乎默認的Accept
標頭為*/*
。 我還在這里找到了相關的請求請求。
我不太確定為什么在一個特定的網站(不是全部)上必須明確指定Accept: text/html
,而默認情況下,任何其他返回HTML的網站都無需做任何額外的工作。 我應該注意,在請求該頁面而不顯式指定text/html
時,該站點上的其他頁面可以正常工作。
這不是一個大問題,我可以使用text/html
輕松解決它,但我只是覺得有點奇怪。
我還應該注意,當我使用另一個REST客戶端(例如IntelliJ的內置客戶端)並指定Accept: */*
它將返回HTML沒問題...
編輯:好的,這有點奇怪...當我這樣做時:
RestClient.get('http://www.example.com/path/path', accept: '*/*')
然后,它按我期望的那樣返回HTML,但忽略accept: */*
參數不起作用,即使默認情況下根據源代碼標頭應為*/*
。
我想知道是否因為我的URL中包含/path/path
,RestClient認為它是某個API的終結點,所以它嘗試檢索XML。
編輯2:做更多的實驗...我能夠將塊傳遞給GET請求,如下所示:
RestClient.get('http://example.com/path/path') {
|response, request, result|
puts response.code
puts request.processed_headers
}
我得到一個404
錯誤,然后processed_headers
標題返回:
{"Accept"=>"*/*; q=0.5, application/xml", "Accept-Encoding"=>"gzip, deflate"}
響應主體如下:
<?xml version="1.0" encoding="UTF-8"?>
<hash>
<errors>Not Found</errors>
</hash>
因此,它正在發送*/*
標頭,但由於某種原因,它看起來像application/xml
獲得優先級。 也許這只是服務器端的事情,我無法控制? 我想我只是不確定如何將application/xml
甚至添加到Accept
標頭中。 我在源代碼中找不到任何內容。
發現了“問題”。 似乎我在原始帖子中提到的PR直到rest-client2.0.0.rc1
才真正發布,而rest-client2.0.0.rc1
仍然是候選發布版本,因此它實際上尚未發布,或者至少無法通過我的gem update rest-client
。
我使用以下命令安裝2.0.0rc2
:
gem install rest-client -v 2.0.0.rc2 --pre
然后在我的代碼中引用它,現在可以使用:
@request = RestClient::Request.new(:method => :get, :url => 'http://some/resource')
puts @request.default_headers[:accept]
打印...
*/*
如預期的那樣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.