Ruby rest客户端";接受;标题问题
我在试验Ruby gem时遇到了一个可以说是“问题”。我注意到,当我点击某个应该返回HTML的URL时,我会得到一个404错误,除非我特别指定:Ruby rest客户端";接受;标题问题,ruby,rest,header,rest-client,Ruby,Rest,Header,Rest Client,我在试验Ruby gem时遇到了一个可以说是“问题”。我注意到,当我点击某个应该返回HTML的URL时,我会得到一个404错误,除非我特别指定: RestClient.get('http://www.example.com/path/path', accept: 'text/html') 然而,我在没有显式指定Accept标题的情况下点击的几乎任何其他页面都会返回HTML 我查看了位于第486行附近的请求对象的源,在默认\u头方法中,似乎默认的接受头是*/*。我还找到了相关的pull请求 我不
RestClient.get('http://www.example.com/path/path', accept: 'text/html')
然而,我在没有显式指定Accept
标题的情况下点击的几乎任何其他页面都会返回HTML
我查看了位于第486行附近的请求
对象的源,在默认\u头
方法中,似乎默认的接受
头是*/*
。我还找到了相关的pull请求
我不太清楚为什么在一个特定的站点(不是所有站点)上,我必须显式地指定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
}
<?xml version="1.0" encoding="UTF-8"?>
<hash>
<errors>Not Found</errors>
</hash>
我得到一个404
错误,processed\u头返回:
{"Accept"=>"*/*; q=0.5, application/xml", "Accept-Encoding"=>"gzip, deflate"}
答复如下:
RestClient.get('http://example.com/path/path') {
|response, request, result|
puts response.code
puts request.processed_headers
}
<?xml version="1.0" encoding="UTF-8"?>
<hash>
<errors>Not Found</errors>
</hash>
找不到
因此,它发送了一个*/*
头,但由于某种原因,它看起来像是应用程序/xml
获得了优先级。也许这只是服务器端的事情,我无法控制?我想我只是不确定application/xml
是如何添加到Accept
头中的。我找不到任何浏览源代码的内容。找到了“问题”。看起来我在原始帖子中提到的PR直到rest-client2.0.0.rc1才真正发布,它仍然是一个发布候选,所以它还没有发布,或者至少可以通过我的gem update rest客户端获得
我使用以下命令安装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]
印刷品
*/*
现在正如所料。发现了“问题”。看起来我在原始帖子中提到的PR直到rest-client2.0.0.rc1才真正发布,它仍然是一个发布候选,所以它还没有发布,或者至少可以通过我的gem update rest客户端获得
我使用以下命令安装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]
印刷品
*/*
正如预期的那样。您能告诉我那个特定请求的错误代码是什么吗?是的,它给了我一个404。我能够将一个块传递给GET请求,它发送的接受头是:{“Accept”=>“*/*;q=0.5,application/xml”
…如果我明确告诉它只接受*/*
,它就像我在编辑中提到的那样工作,我不太清楚为什么xml在同一站点的其他页面上使用相同的头时会优先(或没有)工作正常…更具体的字段比那些具有一系列可能性的字段具有更高的优先级。因此这里xml/application
的优先级越来越高。您可以研究更多关于accept@r2\u d2的内容,我只是不确定application/xml
字段到底是如何被放入accept
标题中的…我不能确定在源代码的任何地方都找不到它。据我所知,它应该是*/*
,但在过程中的某个地方,q=0.5,application/xml
被追加了。@r2\u d2旧的行为是在Accept头中发送*/*;q=0.5 application/xml
。有人做了一个公关,把它改成了*/*
。我真的想起来了解决问题。我安装了一个候选版本(2.0.0rc2),问题已经解决。你能告诉我那个特定请求的错误代码是什么吗?是的,它给了我一个404。我能够将一个块传递给GET请求,它发送的接受头是:{“Accept”=>“*/*;q=0.5,application/xml”
…如果我明确告诉它只接受*/*
,它就像我在编辑中提到的那样工作,我不太清楚为什么XML在同一站点的其他页面上具有相同的页眉(或缺少页眉)时会优先使用工作正常…更具体的字段比那些具有一系列可能性的字段具有更高的优先级。因此这里xml/application
的优先级越来越高。您可以研究更多关于accept@r2\u d2的内容,我只是不确定application/xml
字段到底是如何被放入accept
标题中的…我不能确定在源代码的任何地方都找不到它。据我所知,它应该是*/*
,但在过程中的某个地方,q=0.5,application/xml
被追加了。@r2\u d2旧的行为是在Accept头中发送*/*;q=0.5 application/xml
。有人做了一个公关,把它改成了*/*
。我真的想起来了解决问题。我安装了一个候选版本(2.0.0rc2),问题已经解决。