поток em-http с базовой аутентификацией и gzip зависает

Я пытаюсь использовать Gnip PowerTrack API, который требует от меня подключения к HTTPS-потоку JSON с базовой аутентификацией. Я чувствую, что это должно быть довольно тривиально, поэтому я надеюсь, что какой-нибудь рубин умнее меня укажет на мою очевидную ошибку.

Вот соответствующие части моего кода Ruby 1.9.3:

require 'eventmachine'
require 'em-http'
require 'json'

usage = "#{$0}  "
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.

Обратите внимание, что это работает:

curl --compressed -uusername $GNIP_STREAMING_URL

РЕДАКТИРОВАТЬ: Я уверен, что это неявно, но я не могу выдать никаких прав доступа или фактического URL-адреса, поэтому не спрашивайте;)

РЕДАКТИРОВАТЬ # 2 : yajl-ruby, вероятно, сработал бы, если бы я мог выяснить, как кодировать учетные данные для URL-адреса (простая кодировка URL-адреса, похоже, не работает, поскольку я не могу выполнить аутентификацию с помощью Gnip).

РЕДАКТИРОВАТЬ №3: @rweald обнаружил, что em-http не поддерживает потоковую передачу gzip, я создал здесь проблему с GitHub.

РЕДАКТИРОВАТЬ №4: Я раздвоил и исправил это в em-http-request, вы можете указать на мою вилку , если хотите использовать em-http таким образом. Патч был добавлен в репозиторий сопровождающего и будет работать в следующем выпуске.

РЕДАКТИРОВАТЬ №5: Мои исправления были опубликованы в em-http-request 1.0.3, так что это больше не должно быть проблемой.

6
задан Eric Wendelin 2 October 2012 в 15:52
поделиться