如何使用 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."
我无法将大数据发送到我正在侦听的套接字。
这是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."