Хороший запрос от браузера, но плохой запрос от ruby?

Я использую API пользовательского поиска Google и пытаюсь получить к нему доступ через некоторый код ruby:

Вот фрагмент кода

req = Typhoeus::Request.new("https://www.googleapis.com/customsearch/v1?key={my_key}&cx=017576662512468239146:omuauf_lfve&q=" + keyword, followlocation: true)
res = req.run

Похоже, что тело ответа это:

    <p>Your client has issued a malformed or illegal request.  <ins>That’s all we know.</ins>
'
    from /usr/local/lib/ruby/2.1.0/json/common.rb:155:in `parse'
    from main.rb:20:in `initialize'
    from main.rb:41:in `new'
    from main.rb:41:in `<main>'

Когда я пытаюсь сделать то же самое из браузера, это работает как шарм. Еще более запутанным является то, что этот код работал 12 часов назад. Я только изменил ключевое слово, которое оно должно искать, однако оно начало возвращать ошибку.

Какие-либо предложения? Я уверен, что у меня достаточно кредитов для большего количества запросов

1 ответ

Решение

Возможно, у вас есть проблемы со специальными символами в вашем параметре get keyword, Если вы введете URL в вашем браузере, браузер настроит их. Однако для ruby ​​вам необходимо экранировать эти символы таким образом, чтобы строка "sky line" становится "sky+line" и так далее. Существует служебная функция CGI:: escape, которая используется так:

require 'cgi'
CGI::escape("sky line")
=> "sky+line"

Ваш фиксированный код будет выглядеть примерно так:

req = Typhoeus::Request.new("https://www.googleapis.com/customsearch/v1?key={my_key}&cx=017576662512468239146:omuauf_lfve&q=" + CGI::escape(keyword), followlocation: true)
res = req.run

Тем не менее, поскольку вы в любом случае используете Typhoeus, вы должны иметь возможность использовать его params параметр и пусть Typhoeus обработает выход:

req = Typhoeus::Request.new(
  "https://www.googleapis.com/customsearch/v1?&cx=017576662512468239146:omuauf_lfve",
   followlocation: true, 
   params: {q: keyword, key: my_key}
)
res = req.run

Больше примеров на странице GitHub Typhoeus.

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