Конвертировать запрос RestClient в Net :: HTTP, используя ruby - PullRequest
0 голосов
/ 05 ноября 2018

Не удается преобразовать запросы RestClient в Net :: HTTP.

Функция # 1:

payload = {'login': 'user', 'password': 'pass'}
headers = {'Shopify-Auth-Mechanisms': 'password'}
headers['Host'] = 'https://sample.com'
headers['User-Agent'] = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17'

uri = URI('https://login.com/test')

response = RestClient.post(url, payload, headers) do |response, request, result, &block|
  puts response.code
  if [301, 302, 307].include? response.code
    @cookies = response.cookies
    RestClient.get(response.headers[:location], cookies: @cookies)
  else
    response.return!(request, result, &block)
  end
end

page = Nokogiri::HTML(response)
@crsf_token = page.css("meta[name='csrf-token']").first.attributes["content"].value

Функция № 2:

response = RestClient::Request.execute(
  method: :post,
  payload: sample_data.to_json,
  url: @discount_url,
  cookies: @cookies,
  headers: headers
)

В функции # 1: я попробовал приведенный ниже код, но получил другой результат.

#try 1

uri = URI(@login_url)
Net::HTTP.start(uri.host, uri.port) do |http, payload, &block|
  request = Net::HTTP::Post.new(uri.request_uri, headers)
  request.body = payload.to_json
  response = http.request(request)

  puts response.code
end 

#try 2

uri = URI(@login_url)
http = Net::HTTP.new(uri.host, uri.port)
request = Net::HTTP::Post.new(uri.request_uri)
request["Shopify-Auth-Mechanisms"] = 'password'
request["Host"] = 'https://sample.com'
request["User-Agent"] = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17'
request.body = payload.to_json
request.basic_auth(username, password)
response = http.request(request)

В исходном запросе RestClient (функция # 1) возвращается 200 , но в моем преобразовании возвращается 400 .

Не представляю, пожалуйста, помогите преобразовать 2 функции. Заранее спасибо!

...