rails - ruby http party
Equivalente de Ruby de la biblioteca de solicitudes de Python(Cliente HTTP) (8)
Hay una biblioteca en Python que me encanta llamada "Solicitudes". Solicitudes es una compilación de cliente HTTP en urllib3. " peticiones doc ".
Estoy buscando algo similar en Ruby. Básicamente lo que necesito es:
- Soporte para subir archivos (multipart / form-data).
- Fácil de obtener / publicar.
- Las cookies se pueden pasar de un objeto de respuesta a un objeto de solicitud (crear un script de inicio de sesión manualmente).
- Estable y flexible.
- Soporte de sesiones (para no tener que manejar las cookies manualmente si no las tenemos).
He buscado en Typhoeus, pero el ejemplo de código en la página de inicio no funciona; han movido el código a lo largo y el método de get
ya no es directamente accesible de esa manera, por lo que no está empezando bien. El bordillo parece agradable y me gusta CURL, también hay rest-client, que parece popular, y em-http parece bastante rápido según el punto de referencia. También hay un Patrón y un bordillo, que no tengo tiempo de probar. Y, por supuesto, Net: HTTP. Pero, no parece tener una solución general que todos apunten.
Creo que mucha gente ha estado en mi situación y me pregunto qué han elegido y por qué.
¿Has mirado la gema de HTTParty ?
Aquí hay una matriz de características con una selección de clientes HTTP para Ruby.
https://bit.ly/RubyHTTPClients
El autor de la comparación es el autor de httpclient
, pero por su aspecto, la comparación es justa.
Para un estilo más narrativo con alguna explicación de la matriz, consulte http://www.slideshare.net/HiroshiNakamura/rubyhttp-clients-comparison del mismo autor.
La comparación sale en parte a favor de httpclient, que también puedo recomendar. Simple, funcional, compatible con todas las plataformas Ruby y performant. Mejor compatibilidad con las cookies que cualquier otra cosa, pero la presentación menciona que las cookies pueden pasar de un sitio (malévolo) a otro si utiliza el mismo objeto cliente. No sé si esto sigue siendo cierto.
El OpenURI es el primer lugar para mirar. Es simple y maneja bien lo básico.
Typhoeus, que he usado varias veces para procesos paralelos, funciona bien. Documentation y el código base están disponibles en 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
También uso Net :: HTTP ocasionalmente, pero OpenURI y Typhoeus, con Hydra, han demostrado ser fáciles de usar e integrarse con mi código.
Esta pregunta parece carecer de respuestas recientes. Así que estoy llenando el vacío.
Viniendo de Python, y habiendo amado la biblioteca de solicitudes por lo que hace fácilmente, recientemente descubrí un muy buen equivalente de Ruby en rest_client
Es compatible con todas las funciones mencionadas en la pregunta y parece ser muy agradable desde la perspectiva de la usabilidad, lo que la biblioteca de solicitudes desea lograr.
Finalmente he encontrado este HTTPClient: github.com/nahi/httpclient
Empecé a usarlo, coincide con las características que quería y, además, es bastante rápido de acuerdo con algún punto de referencia. También es compatible con algunas cosas avanzadas como la transmisión o la respuesta fragmentada. Es una pena que no sea famoso en la comunidad rubí. :)
Hay https://github.com/cyx/requests , que es exactamente lo que está preguntando la pregunta, un puerto de la biblioteca de solicitudes de python.
Lamento escuchar, que Tifoo no funcionó para ti. La razón es que el archivo README muestra cómo trabajar con Typhoeus v0.5.0.rc, que se puede instalar con
gem install typhoeus --pre
o
gem "typhoeus", git: "git://github.com/typhoeus/typhoeus.git"
. No hay soporte de sesión para Typhoeus, pero aparte de eso, podría ser una buena opción. Al menos es estable como el infierno, ya que está construido sobre libcurl.
Ejemplo de envío de archivos:
Typhoeus.post("www.example.com/file", body: { file: File.open("testfile.txt","r") })
Desafortunadamente, no hay un atajo para tratar con las cookies, tiene que configurarlas manualmente:
Typhoeus.get("www.example.com/needs_cookie", headers: { Cookie: "PRIVATE" })
TLDR : Elegiría Typhoeus por su velocidad y libcurl si estás dispuesto a configurar las cosas por ti mismo. De lo contrario, miraría Faraday y lo usaría con el adaptador Typhoeus.
Edición: He añadido instrucciones de instalación al README .
Edición: se libera 0.5.
Si necesita cookies y manejo de formularios, mechanize es la única manera de hacerlo.