Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby rest客户端";接受;标题问题_Ruby_Rest_Header_Rest Client - Fatal编程技术网

Ruby rest客户端";接受;标题问题

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请求 我不

我在试验Ruby gem时遇到了一个可以说是“问题”。我注意到,当我点击某个应该返回HTML的URL时,我会得到一个404错误,除非我特别指定:

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),问题已经解决。