如何使用cURL将XML文件发送到telnet服务器

时间:2016-02-02 17:30:35

标签: ruby curl telnet

我无法将大数据发送到我收听的套接字。

这是server.rb:

#!/usr/bin/env ruby

require 'socket'

server = TCPServer::new 3000
loop do
  client = server.accept
  client.puts 'Running...'
  raw_data = client.gets.chomp
  client.puts "Got #{raw_data}"
  client.puts 'done.'
  client.close
end

使用$ ruby server.rb运行服务器后,我可以

$ echo "test" | curl telnet://127.0.0.1:3000
Running...
Got test
done.

$ echo "something else" | curl telnet://127.0.0.1:3000
Running...
Got something else
done.

但是我在运行时遇到错误:

$ cat /a/sizable/xml/file.xml | curl telnet://127.0.0.1:3000
curl: (55) Send failure: Broken pipe
Running...%

似乎我可以使用43b文件运行良好,但是当我使用5.3k XML文件运行它时会失败。

我也试过了:

$ curl -T "/a/sizable/xml/file.xml" telnet://localhost:3000

产生相同的结果。

如何将此原始XML数据发送到我的服务器?

1 个答案:

答案 0 :(得分:1)

在服务器上,您只是阅读客户端发送的第一行数据

raw_data = client.gets.chomp

您的XML文件可能包含多行。但是,在服务器读取第一行之后,它会将其打印回来并简单地关闭连接。这会导致“断管”错误,因为curl在关闭连接时终止。

为了阅读整个输入,您可以改为使用它:

while raw_line = client.gets.chomp # Read lines from socket
  client.puts "Got #{raw_line}"    # and print them
end
client.puts "done."