Temel auth ile bir HTTPS JSON akışına bağlanmamı gerektiren Gnip PowerTrack API'sini tüketmeye çalışıyorum. Bunun oldukça önemsiz hissettirilmesini istiyorum, bu yüzden benden daha akıllı olan bazı rubyistlerin benim bariz hatama işaret edebileceğini umuyorum.em-http akışı
İşte ilgili kısımları benim yakut 1.9.3 kod: o zaman
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
akışı bağlandığı (My Gnip pano bağlantı repors) ama sadece tamponlar ve bir şey çıkarır asla. Aslında, hiç s.stream do..
bloğuna girmemiş gibi görünüyor. Bunun bir GZip kodlanmış akışı olduğunu unutmayın.
Not Bu çalıştığını:
curl --compressed -uusername $GNIP_STREAMING_URL
DÜZENLEME: Bu tür örtülü olduğundan emin değilim, ama herhangi bir giriş creds veya gerçek URL'yi dışarı veremez, o yüzden sorma;)
EDIT # 2: URL için kimlik bilgilerini nasıl kodlayacağımı anlayabilsem yajl-ruby büyük olasılıkla işe yarayacaktır (basit URL kodlaması Gnip ile kimlik doğrulaması başarısız olarak çalışacak gibi görünmüyor).
EDIT # 3: @rweald, em-http akış gzip'i desteklemediğini buldu, burada bir GitHub sorunu oluşturdum.
DÜZENLEME # 4: Bunu em-http-isteğinde belirttim ve düzelttim, em-http'u bu şekilde kullanmak istiyorsanız my fork işaretini verebilirsiniz. Yama, bakım şirketinin repo'yla birleştirildi ve bir sonraki sürümde çalışacak.
DÜZENLEME # 5: Düzeltmelerim em-http-request 1.0.3'te yayımlanmıştır, bu yüzden artık bir sorun olmamalıdır.
Güzel Bul!Belki de em-http gemini düzeltiriz. Aksi halde, bağlantıyı canlı tutmak için yajl-yakut veya kaldırım kullanmanın bir yolu var mı ve sonra üstel bir geri çekilme modelinde yeniden bağlanmayı deneyin. –
Evet, dün gerçekte gzip json'unu GNIP'den yayınlamaya izin verecek bir geçici çözüm buldum. Şimdi kodu temizlemeye çalışıyorum ve onu github projemde görebileceksiniz https://github.com/rweald/gnip-stream – rweald
Sanırım düzeltmeyi de genelleştirebilmeliyim. em-http-isteği için bir yama olarak eklenebilir. Haftasonuna bir göz atacağım. – rweald