Пожалуйста, помогите мне понять, что я делаю неправильно? Мне нужно сделать POST-запрос api из моего приложения rails, я попытался сделать это сначала с помощью gem «faraday», а затем с «net/http». Ответ от сервера тот же. Счет создает, но дает ошибку:Net :: HTTPBadResponse (неправильный формат строки заголовка)
Net::HTTPBadResponse (wrong header line format)
class Connect
require 'uri'
require 'net/http'
require 'net/https'
require 'faraday'
def initialize(email, password, account)
@base_url = "https://example.com"
@client_id = ENV["client_id"]
@client_secret = ENV["client_secret"]
@email = email
@password = password
@account = account
end
# method with net/http
def create_account
@toSend = {
first_name: @account[:first_name],
last_name: @account[:last_name],
client_id: @client_id,
client_secret: @client_secret,
email: @email,
password: @password
}.to_json
uri = URI.parse("#{@base_url}/endclient/api/account")
https = Net::HTTP.new(uri.host,uri.port)
https.use_ssl = true
req = Net::HTTP::Post.new(
uri.path,
initheader = {
'Content-Type' =>'application/json',
'Accept' =>'application/json'
}
)
req.body = "#{@toSend}"
res = https.request(req)
end
# faraday method
def make_account
conn = Faraday.new(:url => "#{@base_url}") do |faraday|
faraday.response :logger
faraday.adapter Faraday.default_adapter
end
params = { first_name: @account[:first_name],
last_name: @account[:last_name],
client_id: @client_id,
client_secret: @client_secret,
email: @email,
password: @password
}.to_json
response = conn.post do |req|
req.url '/endclient/api/account'
req.headers['Content-Type'] = 'application/json'
req.headers['Accept'] = 'application/json'
req.body = params
end
end
end
Done этот запрос с успехом через Postman, поэтому конечная точка апи работает.
Пожалуйста, помогите мне понять, что случилось с заголовками? Спасибо заранее!
UPDATE:
Может быть проблема в этом?
Cannot render console with content type application/jsonAllowed content types: [#<Mime::Type:0x00000003661658 @synonyms=["application/xhtml+xml"], @symbol=:html, @string="text/html">, #<Mime::Type:0x00000003660fc8 @synonyms=[], @symbol=:text, @string="text/plain">, #<Mime::Type:0x0000000365ca68 @synonyms=[], @symbol=:url_encoded_form, @string="application/x-www-form-urlencoded">]
Для вашего метода net/http попробуйте этот 'req.body = @ toSend.to_query' вместо' req.body = "# {@ toSend}" '. сообщите мне, если это сработает. –
@HarryBomrah, спасибо за ваш ответ, я попробовал это, он дает мне ошибку 'ArgumentError (неправильное количество аргументов (0 для 1)' –
Какая строка? У меня что-то изменилось? –