Использование Ruby для отправки XML-запроса на веб-сервер
боюсь, у меня нет большого опыта в публикации документов (например, 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 ответов
Это невероятно легко, при использовании rest-client gem
require 'rest_client'
response = RestClient.post "http://127.0.0.1:2000", "<tag1>text</tag1>", :content_type => "text/xml"