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

How to use cURL to send an XML file to a telnet server

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


这是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 数据发送到我的服务器?

在服务端,你只是在读取客户端发送的第一行数据

raw_data = client.gets.chomp

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

为了读取整个输入,您可以改用这个:

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