簡體   English   中英

Ruby Rest-Client的“ Accept”標頭問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM