首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有基本身份验证和gzip挂起的em-http流

具有基本身份验证和gzip挂起的em-http流
EN

Stack Overflow用户
提问于 2012-02-19 12:55:16
回答 4查看 897关注 0票数 6

我正在尝试使用Gnip,它要求我使用基本身份验证连接到PowerTrack的HTTPS流。我觉得这应该是相当微不足道的,所以我希望一些比我聪明的rubyist开发者能指出我明显的错误。

下面是我的ruby 1.9.3代码的相关部分:

代码语言:javascript
复制
require 'eventmachine'
require 'em-http'
require 'json'

usage = "#{$0} <user> <password>"
abort usage unless user = ARGV.shift
abort usage unless password = ARGV.shift
GNIP_STREAMING_URL = 'https://stream.gnip.com:443/foo/bar/prod.json'

http = EM::HttpRequest.new(GNIP_STREAMING_URL)
EventMachine.run do
  s = http.get(:head => { 'Authorization' => [user, password], 'accept' => 'application/json', 'Accept-Encoding' => 'gzip,deflate' }, :keepalive => true, :connect_timeout => 0, :inactivity_timeout => 0)

  buffer = ""
  s.stream do |chunk|
    buffer << chunk
    while line = buffer.slice!(/.+\r?\n/)
      puts JSON.parse(line)
    end
  end
end

流是连接的(我的Gnip仪表板报告了一个连接),但随后只是缓冲,从不输出任何内容。事实上,它似乎从未进入过s.stream do..块。请注意,这是一个GZip编码流。

请注意,这是可行的:

代码语言:javascript
复制
curl --compressed -uusername $GNIP_STREAMING_URL

编辑:我相信这是隐含的,但我不能给出任何登录凭证或实际的URL,所以不要问;)

编辑#2:如果我知道如何对URL的凭证进行编码,yajl-ruby可能会起作用(简单的URL编码似乎不起作用,因为我无法使用Gnip进行身份验证)。

编辑#3:@rweald发现em-http不支持流式gzip,我在这里创建了一个GitHub问题。

编辑#4:我已经在em-http-request中分支并修复了这个问题,如果你想以这种方式使用em-http,你可以指向my fork。该补丁已经被合并到维护者的repo中,并将在下一个版本中工作。

编辑#5:我的修复已经发布在em-http-request 1.0.3中,所以这应该不再是问题。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-02-22 13:13:21

问题出在em-http-request中。如果你看看https://github.com/igrigorik/em-http-request/blob/master/lib/em-http/decoders.rb

您将注意到GZIP解压程序不能进行流解压缩:( https://github.com/igrigorik/em-http-request/blob/master/lib/em-http/decoders.rb#L100

如果您希望能够使用em-http-request读取流,则需要修复底层的流gzip问题

票数 2
EN

Stack Overflow用户

发布于 2012-03-06 05:45:05

我一直在使用这个Gist中的一些代码库来连接Gnip控制台。https://gist.github.com/1468622

票数 1
EN

Stack Overflow用户

发布于 2012-02-22 06:21:35

看起来使用https://github.com/brianmario/yajl-ruby可以很好地解决这个问题

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

https://stackoverflow.com/questions/9346848

复制
相关文章

相似问题

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