Подтвердить что ты не робот

Ruby Equivalent библиотеки запросов Python (клиент HTTP)

В Python есть библиотека, которую мне нравится, называется "Запросы". Запросы - это сборка HTTP-клиента на urllib3. " запрос doc".

Я ищу что-то подобное в Ruby. В основном мне нужно:

  • Поддержка файлов загрузки (multipart/form-data).
  • Easy get/post.
  • Куки файлы могут быть переданы из объекта ответа в объект запроса (введите вручную login script).
  • Стабильный и гибкий.
  • Поддержка сессий (чтобы не обрабатывать файлы cookie вручную, если у нас их тоже нет).

Я посмотрел на Typhoeus, но пример кода на домашней странице не работает; они переместили код вместе, и метод get больше не доступен напрямую, как это, поэтому он не начинается хорошо. Curb кажется приятным, и мне нравится cURL, есть также клиент rest, который кажется популярным, и em-http кажется довольно быстрым в соответствии с эталоном. Существует также Patron и curb-fu, которые у меня нет времени, чтобы попробовать. И, конечно же, Net: HTTP. Но, похоже, у него нет основного решения, на которое все указывают.

Я думаю, что в моей ситуации много людей, и мне интересно, что они выбрали и почему?

4b9b3361

Ответ 1

В конце концов я нашел этот HTTPClient: https://github.com/nahi/httpclient

Я начал использовать его, он соответствует функциям, которые я хотел, и более того, это довольно быстро в соответствии с некоторыми критериями. Он также поддерживает некоторые продвинутые функции, такие как потоковое воспроизведение или чередование ответов. Это позор, хотя он не известен в рубинском сообществе.:)

Ответ 2

Вот функциональная матрица с выбором HTTP-клиентов для Ruby.

https://bit.ly/RubyHTTPClients

Автор сравнения является автором httpclient, но из его взглядов сравнение справедливо.

Для более нарративного стиля с некоторым объяснением матрицы см. http://www.slideshare.net/HiroshiNakamura/rubyhttp-clients-comparison от того же автора.

Сравнение происходит частично в пользу httpclient, который я также могу рекомендовать. Простой, функциональный, совместимый со всеми платформами Ruby и исполнителями. Лучшая поддержка файлов cookie, чем что-либо еще, но в презентации упоминается, что файлы cookie могут протекать с одного (злонамеренного) сайта на другой, если вы используете один и тот же объект-клиент. Не знаю, верно ли это.

Ответ 3

Встроенное OpenURI - первое, что нужно посмотреть. Это просто и прекрасно справляется с основами.

Typhoeus, который я использовал несколько раз для параллельных процессов, прекрасно работает. Документация и codebase доступны в Github.

irb(main):009:0> response = Typhoeus::Request.get("www.example.com")
=> #<Typhoeus::Response:0x007ffbcc067cf8 @code=302, @curl_return_code=0, @curl_error_message="No error", @status_message=nil, @http_version=nil, @headers="HTTP/1.0 302 Found\r\nLocation: http://www.iana.org/domains/example/\r\nServer: BigIP\r\nConnection: close\r\nContent-Length: 0\r\n\r\n", @body="", @time=0.035584, @requested_url=nil, @requested_http_method=nil, @start_time=nil, @start_transfer_time=0.035529, @app_connect_time=2.8e-05, @pretransfer_time=0.000429, @connect_time=2.8e-05, @name_lookup_time=2.8e-05, @request=:method => :get,
    :url => www.example.com, @effective_url="HTTP://www.example.com", @primary_ip="192.0.43.10", @redirect_count=0, @mock=false>
irb(main):010:0> puts response.headers
HTTP/1.0 302 Found
Location: http://www.iana.org/domains/example/
Server: BigIP
Connection: close
Content-Length: 0

Я иногда использую Net:: HTTP, но OpenURI и Typhoeus с Hydra оказались просты в использовании и интегрированы с моим кодом.

Ответ 4

Существует https://github.com/cyx/requests, что именно этот вопрос задает, порт запросов lib из python.

Ответ 5

Вы посмотрели на HTTParty gem?

Ответ 6

Если вам нужны файлы cookie и обработка формы, mechanize - единственный способ пойти.

Ответ 7

Мне жаль слышать, что Тифой не сработал для вас. Причина в том, что README показывает, как работать с Typhoeus v0.5.0.rc, который можно установить с помощью

gem install typhoeus --pre

или

gem "typhoeus", git: "git://github.com/typhoeus/typhoeus.git"

. Нет поддержки сеансов для Typhoeus, но кроме того, что это может быть хорошей подгонкой. По крайней мере, он стабилен, так как он построен поверх libcurl.

Пример отправки файла:

Typhoeus.post("www.example.com/file", body: { file: File.open("testfile.txt","r") })

К сожалению, нет ярлыка для обработки файлов cookie, вы должны установить их вручную:

Typhoeus.get("www.example.com/needs_cookie", headers: { Cookie: "PRIVATE" })

TL;DR: я бы выбрал Typhoeus для его скорости и libcurl, если вы готовы самим настроить ситуацию. В противном случае я бы рассмотрел Faraday и использовал его с адаптером Typhoeus.

Изменить: я добавил инструкции по установке в README.

Отредактировано: 0.5.

Ответ 8

На этот вопрос, похоже, не хватает последних ответов. Так что я заполняю пустоту.

Исходя из самого python и, пользуясь любимой библиотекой запросов, что она делает легко, я недавно обнаружил очень хороший эквивалент Ruby в rest_client

Он поддерживает все функции, упомянутые в вопросе, и, кажется, очень хорош с точки зрения юзабилити - то, к чему стремится библиотека.