Использование Ruby для публикации XML-запроса на веб-сервере - PullRequest
9 голосов
/ 01 февраля 2012

Боюсь, у меня нет большого опыта публикации документов (например, XML) на веб-серверах, поэтому я прошу прощения, если мое понимание HTTP отсутствует.

У меня есть базовый веб-сервер Mongrelустановить в приложении ruby ​​на 127.0.0.1 порт 2000.(Сервер).

Я запускаю отдельное приложение Ruby на том же компьютере.(Клиент).

Мне нужен клиент для отправки XML-документа на сервер.

Я пытался использовать Net :: HTTP для этого, но не могу найти ясныйпример, который говорит мне, что я должен делать.Я попробовал, но столкнулся с ошибками.Я разбил запрос, чтобы сделать его как можно более простым:

http = Net::HTTP.new("127.0.0.1", 2000)
http.post('file', 'query=foo') #xc.rb line 6

, но это приводит к следующей ошибке

    C:/Ruby193/lib/ruby/1.9.1/net/protocol.rb:141:in `read_nonblock': An existing connection was forcibly closed by the remote host. (Errno::ECONNRESET)
    from C:/Ruby193/lib/ruby/1.9.1/net/protocol.rb:141:in `rbuf_fill'
    from C:/Ruby193/lib/ruby/1.9.1/net/protocol.rb:122:in `readuntil'
    from C:/Ruby193/lib/ruby/1.9.1/net/protocol.rb:132:in `readline'
    from C:/Ruby193/lib/ruby/1.9.1/net/http.rb:2562:in `read_status_line'
    from C:/Ruby193/lib/ruby/1.9.1/net/http.rb:2551:in `read_new'
    from C:/Ruby193/lib/ruby/1.9.1/net/http.rb:1319:in `block in transport_request'
    from C:/Ruby193/lib/ruby/1.9.1/net/http.rb:1316:in `catch'
    from C:/Ruby193/lib/ruby/1.9.1/net/http.rb:1316:in `transport_request'
    from C:/Ruby193/lib/ruby/1.9.1/net/http.rb:1293:in `request'
    from C:/Ruby193/lib/ruby/1.9.1/net/http.rb:1286:in `block in request'
    from C:/Ruby193/lib/ruby/1.9.1/net/http.rb:745:in `start'
    from C:/Ruby193/lib/ruby/1.9.1/net/http.rb:1284:in `request'
    from C:/Ruby193/lib/ruby/1.9.1/net/http.rb:1307:in `send_entity'
    from C:/Ruby193/lib/ruby/1.9.1/net/http.rb:1096:in `post'
    from W:/Ruby/A/xc.rb:6:in `<main>'

Я предполагаю, что делаю это совершенно неправильно.Пожалуйста, не могли бы вы дать мне пример (или указать мне учебник), который должен позволить мне публиковать некоторые основные данные, такие как "<tag1>text</tag1>".Надеюсь, тогда я смогу установить соответствующие заголовки и обработать ответ.

Кроме того, мне не нужно использовать net / http;подойдет любой бесплатный метод, не имеющий дополнительных лицензионных ограничений для коммерческого использования.

1 Ответ

4 голосов
/ 03 февраля 2012

Это невероятно легко при использовании rest-client gem

require 'rest_client'

response = RestClient.post "http://127.0.0.1:2000", "<tag1>text</tag1>", :content_type => "text/xml"
...