Ruby-HTTP Post的问题

Ruby-HTTP Post的问题,ruby,http,post,http-post,Ruby,Http,Post,Http Post,这是我的代码: @data = "somedata\r\nsomadata\r\nsomadata\r\n" uri = URI.parse(my_url) http = Net::HTTP.new(uri.host, uri.port) resp, body = http.post(uri.path, @data) 当我尝试运行此程序时,我得到一个“sysread”错误,表示已到达文件末尾(EOFError)。 请注意,如果删除@data的\r,则不会发生错误,但我确

这是我的代码:

   @data = "somedata\r\nsomadata\r\nsomadata\r\n"
   uri = URI.parse(my_url)
   http = Net::HTTP.new(uri.host, uri.port)
   resp, body = http.post(uri.path, @data)
当我尝试运行此程序时,我得到一个“sysread”错误,表示已到达文件末尾(EOFError)。 请注意,如果删除@data的\r,则不会发生错误,但我确实需要它

我使用的是Ruby 1.8.7,但1.9.2也出现了类似的问题

我正在尝试将一个PHP类转换为Ruby,下面是PHP代码:

$req = 'somedata\r\nsomadata\r\nsomadata\r\n';
$r = new HttpRequest($url, HttpRequest::METH_POST);
$r->addRawPostData($req);
$resp = $r->send()->getBody();

谢谢

您不能在Http Post中使用换行符!如果您正在开发web应用程序,则可以使用标准br标记。你想做什么?

这是一个无中生有的想法,但是net/http post的默认内容类型是“x-www-form-urlencoded”。尝试将标题中的ContentType设置为“text/plain”。看一下如何设置标题。

回答稍晚,但我希望它能有所帮助

您的代码使用ruby 2.5.0p0,因此该错误可能是由ruby标准库引起的,并已得到修复

我尝试使用本地sinatra服务器(
ruby simple server.rb
):

以及您的代码(
ruby example.rb
):


好的,我正在将一个PHP类转换为Ruby,将用代码编辑这个问题我看到有人建议:它正在用这个url处理PHP:也许你应该尝试添加http://我试过使用和不使用http,不要认为这是问题所在。URL与PHP中使用的完全相同。我尝试了httpartygem,但它显示了相同的错误。
require 'sinatra'

post '/*' do
  puts "I got #{params}"
end
require 'uri'
require 'net/http'
my_url = "http://localhost:4567/"
@data = "somedata\r\nsomadata\r\nsomadata\r\n"
uri = URI.parse(my_url)
http = Net::HTTP.new(uri.host, uri.port)
resp, body = http.post(uri.path, @data)