2012-01-31 19 views
8

Obawiam się, że nie mam dużego doświadczenia z publikowaniem dokumentów (np. XML) na serwerach internetowych, więc przepraszam, jeśli brakuje mi mojego zrozumienia HTTP.Używanie Ruby do publikowania żądania XML na serwerze internetowym

Mam podstawowy serwer WWW firmy Mongrel skonfigurowany w aplikacji Ruby pod numerem 127.0.0.1 port 2000. (Serwer).

Używam oddzielnej aplikacji Ruby na tym samym komputerze. (Klient).

Potrzebuję klienta, aby opublikować dokument XML na serwerze.

Próbowałem użyć Net :: HTTP, aby to zrobić, ale nie mogę znaleźć wyraźnego przykładu, który mówi mi, co powinienem zrobić. Udało mi się, ale napotkałem błędy. Złamałem wniosek w dół, aby to tak podstawowe, jak to możliwe:

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

ale to prowadzi do następującego błędu

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>' 

sobie wyobrazić robię to całkowicie błędne. Czy możesz podać mi przykład (lub wskazać mi samouczek), który powinien pozwolić mi opublikować podstawowe dane, takie jak "<tag1>text</tag1>". Mam nadzieję, że będę mógł opracować odpowiednie nagłówki i obsłużyć odpowiedź.

Ponadto nie potrzebuję używać net/http; każda bezpłatna metoda, która nie jest objęta dodatkowymi ograniczeniami licencyjnymi, jest w porządku.

+0

próbujesz debugowania klienta. Ale czy udowodniłeś, że serwer działa poprawnie? –

+0

Uzyskuję dostęp do tego samego adresu URL za pośrednictwem przeglądarki internetowej, a serwer prawidłowo wpisuje 'p' na żądanie (nie ustawiłem go jeszcze do zrobienia czegokolwiek innego). Podczas łączenia się z klientem serwer zgłasza, że ​​odbiera błędne żądanie HTTP: Błąd analizy HTTP, nieprawidłowe żądanie (127.0.0.1): # SimonMayer

Odpowiedz

4

Jest to niezwykle łatwe, podczas korzystania z rest-client gem

require 'rest_client' 

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

Jeśli zaznaczysz dziennik serwera żądań, parametrami będą: '{" znacznik1 "=>" tekst "}" zamiast zwykłego "" tekst ". Dlaczego? –

+0

Nie wiem. Jeśli chcesz otrzymać odpowiedź, powinieneś zadać to jako nowe pytanie. – SimonMayer

Powiązane problemy