Ruby - проблема с HTTP Post - PullRequest
       3

Ruby - проблема с HTTP Post

0 голосов
/ 01 июня 2011

это мой код:

   @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). Обратите внимание, что если я удалю \ r из @data, ошибка не возникнет, но она мне действительно нужна.

Я использую 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();

Спасибо!

Ответы [ 3 ]

0 голосов
/ 02 июня 2011

Это снимок в темноте, но по умолчанию ContentType для net / http post - "x-www-form-urlencoded". Попробуйте установить ContentType в заголовке на «text / plain». Взгляните на net / http docs , чтобы узнать, как установить заголовок.

0 голосов
/ 24 апреля 2018

Немного поздний ответ, но я надеюсь, что это поможет.

Ваш код работает с ruby ​​2.5.0p0, поэтому, возможно, ошибка была вызвана стандартной библиотекой ruby ​​и исправлена.

Я пытался с локальным сервером Синатра (ruby simple-server.rb):

require 'sinatra'

post '/*' do
  puts "I got #{params}"
end

И ваш код (ruby example.rb):

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)
0 голосов
/ 01 июня 2011

Вы не можете использовать переводы строк в Http Post! Если вы разрабатываете веб-приложение, вы можете использовать стандартный тег br. Что ты пытаешься сделать?

...