Tôi đang cố gắng sử dụng API PowerTrack Gnip, yêu cầu tôi kết nối với luồng JSON JSON bằng auth cơ bản. Tôi cảm thấy như thế này là khá tầm thường vì vậy tôi hy vọng một số rubyist thông minh hơn tôi có thể chỉ ra sai lầm rõ ràng của tôi.luồng em-http với lệnh auth và gzip cơ bản
Dưới đây là phần có liên quan ruby của tôi 1.9.3 mã:
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
sẽ kết nối dòng (dashboard Gnip My repors một kết nối) nhưng sau đó chỉ cần đệm và không bao giờ kết quả đầu ra bất cứ điều gì. Trong thực tế, có vẻ như nó không bao giờ đi vào khối s.stream do..
. Lưu ý rằng đây là luồng được mã hóa GZip.
Lưu ý rằng công trình này:
curl --compressed -uusername $GNIP_STREAMING_URL
EDIT: Tôi chắc chắn đây là kinda ngầm, nhưng tôi không thể đưa ra bất kỳ creds đăng nhập hoặc URL thực tế, vì vậy đừng hỏi;)
EDIT # 2: yajl-ruby có thể hoạt động nếu tôi có thể tìm ra cách mã hóa thông tin đăng nhập cho URL (mã hóa URL đơn giản dường như không hoạt động khi tôi không xác thực với Gnip).
EDIT # 3: @rweald thấy rằng em-http không hỗ trợ phát trực tuyến gzip, tôi đã tạo một vấn đề GitHub tại đây.
EDIT # 4: Tôi đã chia đôi và sửa lỗi này theo yêu cầu em-http, bạn có thể trỏ đến my fork nếu bạn muốn sử dụng em-http theo cách này. Bản vá đã được sáp nhập vào repo của người bảo trì và sẽ làm việc trong bản phát hành tiếp theo.
EDIT # 5: Các bản sửa lỗi của tôi đã được xuất bản trong yêu cầu em-http-yêu cầu 1.0.3, vì vậy điều này sẽ không còn là vấn đề nữa.
Rất dễ tìm!Có lẽ chúng ta sửa đá quý em-http. Nếu không, có cách nào để sử dụng yajl-ruby hoặc lề đường để giữ cho kết nối còn sống và sau đó thử kết nối lại trong một mô hình quay ngược theo hàm mũ không? –
Vâng, vì vậy tôi thực sự tìm thấy một cách giải quyết ngày hôm qua sẽ cho phép streaming jzip json từ GNIP. Tôi đang làm việc để làm sạch mã ngay bây giờ và bạn sẽ có thể nhìn thấy nó trong dự án github của tôi https://github.com/rweald/gnip-stream – rweald
Tôi nghĩ rằng tôi sẽ có thể khái quát hóa các sửa chữa cũng như vậy mà nó có thể được thêm vào dưới dạng bản vá cho em-http-request. Tôi sẽ có một cái nhìn qua cuối tuần. – rweald