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. Но, похоже, у него нет основного решения, на которое все указывают.
Я думаю, что в моей ситуации много людей, и мне интересно, что они выбрали и почему?
Ответы
Ответ 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
Он поддерживает все функции, упомянутые в вопросе, и, кажется, очень хорош с точки зрения юзабилити - то, к чему стремится библиотека.