2012-05-21 1 views
4

Я использую Net::HTTP в Ruby 1.9.2p290 для обработки некоторых, очевидно, сетевых вызовов.Можно ли передать полный запрос Ruby Net :: HTTP в виде строки перед отправкой?

у меня теперь есть потребность увидеть полный запрос, который отправляется на сервер (как один длинная большая строка в соответствии с HTTP 1.0/1.1.

Другими словами, я хочу Net::HTTP справиться с тяжелым подъемом генерируя HTTP-совместимый запрос + тело, но я хочу отправить строку с помощью настраиваемого механизма доставки.

Net::HTTPRequest, похоже, не имеет никаких полезных методов здесь - мне нужно опускаться вниз по стеку и увлекать что-то?

Кто-нибудь знает о хорошей библиотеке, может быть, кроме Ne t :: HTTP, что может помочь?

EDIT: Я также хотел бы сделать то же самое в другую сторону (поворот в строку ответа в Net::HTTP::* - хотя я, кажется, может быть в состоянии создать экземпляр Net::HTTPResponse сам

ответ

2

Запрос:

post = Net::HTTP::Post.new('http://google.com') 
post.set_form_data :query => 'ruby http' 
sio = StringIO.new 
post.exec si, Net::HTTP::HTTPVersion, post.path 
puts sio.string 

Ответ:

si = StringIO.new("HTTP/1.1 200 OK\n") 
bio = Net::BufferedIO.new(si) 
Net::HTTPResponse.read_new(bio) 
+0

Кажется очень близко, я использую код ответа вы предложил, но я. get - 'NoMethodError: undefined method 'closed?' для nil: NilClass', когда я вызываю' read_new'. В частности, когда я анализирую HTTP-ответ без тела. Кроме того, когда у меня есть строка без заголовков, 'headers' равен нулю, а не [], как я ожидал. – makdad

+0

OH, и я забыл сказать - СПАСИБО! Это приближает меня. – makdad

+0

Ну, я понял вторую проблему - это 'header', а не' headers';) – makdad

Смежные вопросы