2012-01-31 46 views
8

Tôi e rằng tôi không có nhiều kinh nghiệm về đăng tài liệu (ví dụ: XML) trên máy chủ web, vì vậy tôi xin lỗi nếu hiểu biết về HTTP của tôi thiếu.Sử dụng Ruby để gửi yêu cầu XML tới máy chủ web

Tôi có một máy chủ web Mongrel cơ bản được thiết lập trong ứng dụng ruby ​​trên 127.0.0.1 cổng 2000. (Máy chủ).

Tôi đang chạy một ứng dụng Ruby riêng trên cùng một máy tính. (Khách hàng).

Tôi cần khách hàng đăng một tài liệu XML lên máy chủ.

Tôi đã thử sử dụng Net :: HTTP để thực hiện việc này, nhưng tôi không thể tìm thấy ví dụ rõ ràng cho tôi biết tôi nên làm gì. Tôi đã gặp lỗi nhưng gặp phải. Tôi đã phá vỡ theo yêu cầu xuống để làm cho nó như là cơ bản càng tốt:

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

nhưng nó kết quả trong các lỗi sau

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

Tôi tưởng tượng tôi đang làm nó hoàn toàn sai. Xin vui lòng bạn có thể cho tôi một ví dụ (hoặc chỉ cho tôi một hướng dẫn) mà nên cho phép tôi đăng một số dữ liệu cơ bản, như "<tag1>text</tag1>". Hy vọng rằng, sau đó tôi sẽ có thể làm việc ra thiết lập các tiêu đề thích hợp và xử lý các phản ứng.

Ngoài ra, tôi không cần sử dụng net/http; bất kỳ phương pháp miễn phí nào không đi kèm với các hạn chế cấp phép sử dụng thương mại bổ sung đều ổn.

+0

Bạn đang cố gắng để gỡ lỗi khách hàng. Nhưng bạn đã chứng minh rằng máy chủ hoạt động đúng chưa? –

+0

Tôi truy cập cùng một URL thông qua trình duyệt web và máy chủ thực hiện đúng 'p' theo yêu cầu (tôi chưa đặt nó làm bất kỳ điều gì khác). Khi kết nối thông qua máy khách, máy chủ báo cáo rằng nó nhận được yêu cầu HTTP không đúng định dạng 'Lỗi phân tích cú pháp HTTP, yêu cầu không đúng định dạng (127.0.0.1): # '. Tôi khá chắc chắn rằng nó chỉ là tôi không biết làm thế nào để chính xác gửi dữ liệu đến máy chủ. Nếu tôi có thể tìm hiểu làm thế nào tôi nên làm điều đó, tôi có thể gỡ lỗi từ đó, nếu cần thiết. – SimonMayer

Trả lời

4

Đây là vô cùng dễ dàng, khi sử dụng đá quý rest-client

require 'rest_client' 

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

Nếu bạn kiểm tra nhật ký máy chủ yêu cầu, các tham số sẽ là '{" tag1 "=>" văn bản "}' thay vì đồng bằng '" văn bản "'. Tại sao vậy? –

+0

Tôi không biết. Nếu bạn muốn có câu trả lời, bạn thực sự nên hỏi đó là một câu hỏi mới. – SimonMayer

Các vấn đề liên quan