Ruby 3 net-http: Как мне закодировать параметры моего запроса, чтобы они соответствовали параметрам в примере Open Page Rank?

Я пытаюсь использовать net/http отправить запрос на Open PageRank.

В api docs этот PHP приводится в качестве примера:

      $url = 'https://openpagerank.com/api/v1.0/getPageRank';
$query = http_build_query(array(
    'domains' => array(
      'google.com',
      'apple.com',
      'unknowndomain.com'
    )
  ));
$url = $url .'?'. $query;
$ch = curl_init();
$headers = ['API-OPR: YOUR-API-KEY-HERE'];
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$output = curl_exec ($ch);
curl_close ($ch);
$output = json_decode($output,true);

Моя попытка в Ruby выглядит так:

      require 'net/http'

uri = URI('https://openpagerank.com/api/v1.0/getPageRank')
params = { domains: ['google.com', 'apple.com', 'unknowndomain.com'] }
uri.query = URI.encode_www_form_component(params)

req = Net::HTTP::Get.new(uri)
req['API-OPR'] = api_key

res = Net::HTTP.start(uri.hostname, uri.port, :use_ssl => true) { |http|
  http.request(req)
}

Пробуя рубин, я получаю 400. В теле сообщается, что домены не предоставлены.

      => "{\"status_code\":400,\"response\":\"No Domains were provided\",\"last_updated\":\"13th Feb 2021\"}"

Глядя на uris запроса в Ruby и PHP, я вижу, что строки запроса различаются.

С помощью URI.encode_www_form(params):

      "https://openpagerank.com/api/v1.0/getPageRank?domains=google.com&domains=apple.com&domains=unknowndomain.com"

С помощью http_build_query():

      https://openpagerank.com/api/v1.0/getPageRank?domains%5B0%5D=google.com&domains%5B1%5D=apple.com&domains%5B2%5D=unknowndomain.com'

Я также пробовал URI.encode_www_form_compoent(params). Полученный URL снова отличается:

      "https://openpagerank.com/api/v1.0/getPageRank?%7B%3Adomains%3D%3E%5B%22google.com%22%2C+%22apple.com%22%2C+%22unknowndomain.com%22%5D%7D"

Я до сих пор получаю такой же ответ.

Я предполагаю, что сервер ожидает, что строка запроса будет иметь определенную кодировку. Как я могу отправить запрос / сгенерировать URL-адрес с параметрами запроса таким образом, чтобы Open PageRank принял?

0 ответов

Другие вопросы по тегам