Ошибка POST-запроса Rails RestClient с 400 Bad Request

Глядя на документы, нет хороших примеров того, как сделать запрос POST. Мне нужно сделать запрос POST с параметром auth_token и получить ответ:

response = RestClient::Request.execute(method: :post,
                        url: 'http://api.example.com/starthere',
                        payload: '{"auth_token" : "my_token"}',
                        headers: {"Content-Type" => "text/plain"}
                       )

400 ошибка неверного запроса:

RestClient::BadRequest: 400 Bad Request
    from /Users/me/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/rest-client-1.8.0/lib/restclient/abstract_response.rb:74:in `return!'
    from /Users/me/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/rest-client-1.8.0/lib/restclient/request.rb:495:in `process_result'
    from /Users/me/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/rest-client-1.8.0/lib/me/request.rb:421:in `block in transmit'

Любые хорошие примеры того, как сделать запрос POST с помощью RestClient?

ИЗМЕНИТЬ:

Вот как я делаю запрос в модели:

  def start
    response = RestClient::Request.execute(method: :post,
                        url: 'http://api.example.com/starthere',
                        payload: '{"auth_token" : "my_token"}',
                        headers: {"Content-Type" => "text/plain"}
                       )
    puts response

  end

person Tom    schedule 03.02.2016    source источник
comment
Вы уверены, что ваш запрос является text/plain запросом?   -  person Pavan    schedule 03.02.2016
comment
@Pavan curl работает, так что я думаю, это правильно? 'curl api.example.com/starthere -d auth_token=my_token'   -  person Tom    schedule 03.02.2016
comment
Как вы обрабатываете запрос на контроллере? Можете ли вы опубликовать соответствующий код?   -  person Pavan    schedule 03.02.2016
comment
@Pavan Я просто печатаю его на консоли, чтобы увидеть ответ на данный момент.   -  person Tom    schedule 03.02.2016
comment
Попробуйте изменить {"Content-Type" => "text/plain"} на {"Content-Type" => "text/html"}   -  person Pavan    schedule 03.02.2016
comment
Также попробуйте это вместо RestClient.post 'http://api.example.com/starthere', :auth_token => 'my_token'   -  person Pavan    schedule 03.02.2016
comment
Есть информация по этому вопросу? Ответы так или иначе решили проблему? Я столкнулся с той же проблемой здесь и хотел бы знать, сработало ли это. Спасибо.   -  person Ed de Almeida    schedule 23.02.2017


Ответы (3)


Попробуйте использовать такой хэш:

def start
   url= 'http://api.example.com/starthere'
   params = {auth_token: 'my_token'}.to_json
   response = RestClient.post url, params
   puts response
end
person zlwaterfield    schedule 26.08.2016

Если вы просто хотите повторить запрос на завивание:

response = RestClient::Request.execute(method: :post, url: 'http://api.example.com/starthere',  payload: {"auth_token" => "my_token"})

И Curl, и RestClient по умолчанию используют один и тот же тип контента (application/x-www-form-urlencoded) при публикации данных в этом формате.

person Pafjo    schedule 03.02.2016
comment
все еще получаю RestClient::BadRequest: 400 Bad Request - person Tom; 04.02.2016
comment
@Tom, поэтому я проверил ваши данные, получил тот же запрос с моим фрагментом RestClient, что и в вашем примере с завитком. Вы уверены, что передали полезную нагрузку как хэш, а не строку? - person Pafjo; 04.02.2016

Если вы попали сюда с той же проблемой, просто знайте, что это распространенная ошибка, которая происходит, когда ваши переменные среды не "установлены".
Я взял это в кавычки, потому что вы могли установить он недоступен в текущей терминальной сессии! Вы можете проверить, доступен ли ENV KEY с помощью:

printenv <yourenvkey>

если вы ничего не получаете, значит, вам нужно повторно добавить его или просто поместить в свои bash файлы

К вашему сведению: размещение моих переменных ENV в моем ~/.bash_profile исправило это.

person Eyewritecode    schedule 15.11.2018