2015-02-16 3 views
0

Я использую жемчужину curb, чтобы сделать многослойный лоток Curl с использованием данных JSON. Однако я не могу фактически получить параметры для публикации и не смог выяснить, как правильно настроить параметры.POST JSON данные с Curl Multi от ruby ​​

urls = [ 
    { 
    :url => "http://localhost:5000/", 
    :method => :post, 
    :headers => {'Accept' => 'application/json', 'Content-Type' => 'application/json'}, 
    :post_fields => {'field1' => 'value1', 'k' => 'j'} 
    } 
] 

Curl::Multi.http(urls) do |easy, code, method| 
    puts "#{easy.body_str.inspect}, #{method.inspect}, #{code.inspect}" 
end 

=>

"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 3.2 Final//EN\">\n<title>400 Bad Request</title>\n<h1>Bad Request</h1>\n<p>The browser (or proxy) sent a request that this server could not understand.</p>\n", :post, nil 

ответ

1

ли что:

urls = [ 
    { 
    :url => "http://localhost:5000/", 
    :method => :post, 
    :headers => {'Accept' => 'application/json', 'Content-Type' => 'application/json'}, 
    :post_fields => {}, 
    :post_body => {'field1' => 'value1', 'k' => 'j'}.to_json, 
    } 
] 

Проблема: Снаряженная не знает, что вы отправляете JSON данные. Curb не читает и не интерпретирует содержимое :headers. Как вы можете видеть here, curb преобразует ваш хэш в строку, разделенную «&», которая является стандартной для обычной передачи данных (не json) http (например: «field1 = value1 & k = j»). Когда сервер (Rails) читает и интерпретирует экспликацию заголовка, говоря, что данные находятся в формате JSON, он пытается декодировать, а результат - то же самое исключение, которое вы получаете, когда вы это делаете: JSON.parse("field1=value1&k=j").

Чтобы решить эту проблему, вам необходимо отправить «post_fields» как пустой хеш и отправить свои фактические данные с помощью «post_body». Кроме того, вам необходимо преобразовать хэш в json вручную с помощью to_json.

Я не знаю, знают ли они (владельцев проекта ограничения) эту проблему, но я предлагаю вам предупредить их об этом.

+0

Удивительно, что сделал! Спасибо огромное! – jwarzech

+0

никаких проблем. Я никогда не слышал об этом камне раньше, но его карнавальный праздник здесь, в Бразилии, поэтому мне было достаточно скучно, чтобы отладить этот камень. :П –

Смежные вопросы