首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Ruby检索OpenID中的XRDS文档

使用Ruby检索OpenID中的XRDS文档
EN

Stack Overflow用户
提问于 2010-08-18 08:56:12
回答 2查看 1.1K关注 0票数 2

我只是在玩OpenID协议。我正在尝试发送探索请求并从google检索XRDS文档。当我尝试使用curl从终端执行此操作时,将得到以下输出

代码语言:javascript
复制
curl --url "https://www.google.com/accounts/o8/id"
    <?xml version="1.0" encoding="UTF-8"?>
    <xrds:XRDS xmlns:xrds="xri://$xrds" xmlns="xri://$xrd*($v*2.0)">
      <XRD>
      <Service priority="0">
      <Type>http://specs.openid.net/auth/2.0/server</Type>
      <Type>http://openid.net/srv/ax/1.0</Type>
      <Type>http://specs.openid.net/extensions/ui/1.0/mode/popup</Type>
      <Type>http://specs.openid.net/extensions/ui/1.0/icon</Type>
      <Type>http://specs.openid.net/extensions/pape/1.0</Type>
      <URI>https://www.google.com/accounts/o8/ud</URI>
      </Service>
      </XRD>
    </xrds:XRDS>

当我尝试从ruby代码中执行相同的操作时,它会给我一个302错误,并且它移动到的url指向同一个请求url。

代码语言:javascript
复制
<HTML>
<HEAD>
<TITLE>Moved Temporarily</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>Moved Temporarily</H1>
The document has moved <A HREF="https://www.google.com/accounts/o8/id">here</A>.
</BODY>
</HTML>

代码语言:javascript
复制
  require 'net/http'
  require 'net/https'
  require 'uri'
  http = Net::HTTP.new(uri.host, uri.port)

  response =  Net::HTTP.get_response(URI.parse("http://www.google.com/accounts/o8/id"))
  puts "#{response.read_body}"

如何通过代码获得XRDS,以及为什么它显示不同的输出。有人能解释一下吗?谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-18 09:43:37

Google希望看到https协议,尽管在您的ruby示例中使用了http,因此出现了302错误。以下代码段将为您提供xrds文档:

代码语言:javascript
复制
require 'net/http'
require 'net/https'
require 'uri'

uri = URI.parse('https://www.google.com/accounts/o8/id')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Get.new(uri.request_uri)
response = http.request(request)
puts "#{response.read_body}"
票数 3
EN

Stack Overflow用户

发布于 2010-08-18 10:28:25

正如您所看到的,当您从ruby获取文档时,它返回302状态代码,这意味着您应该查找location头并遵循它,就像curl一样。

另一个答案是硬编码有效的url,但这不是一个正确的解决方案,因为Google也可以让它返回302并将文档移到其他地方。

更不用说您应该执行完整的亚迪斯发现,而不是希望从url获得一个XRDS文档(例如,Google可能会认为它是解释OpenID的好位置,并使用X-XRDS-Location报头将XRDS移到其他地方)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3510408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档