Faraday: Faraday- und Socken-Proxy mit Authentifizierungsunterstützung

Erstellt am 11. Apr. 2018  ·  9Kommentare  ·  Quelle: lostisland/faraday

Basisinformation

  • Faraday-Version: 0.14, Adapter Net::HTTP
  • Ruby-Version: 2.3.1

    Fehlerbeschreibung

Die Verwendung des Socks-Proxys mit Authentifizierung führt zu Faraday::ConnectionFailed: Dateiende erreicht

Schritte zum Reproduzieren

Faraday initialisieren

    Faraday.new do |connection|
      connection.proxy = "socks://user:pass<strong i="14">@host</strong>:port"
      connection.adapter Faraday.default_adapter
    end

und stellen Sie eine Anfrage

feature v1.0

Hilfreichster Kommentar

Ich benutze Gem 'Socksify'

require "socksify/http"

class Faraday::Adapter::NetHttp
  def net_http_connection(env)
    if (proxy = env[:request][:proxy])
      proxy_class(proxy)
    else
      Net::HTTP
    end.new(env[:url].hostname, env[:url].port || (env[:url].scheme == "https" ? 443 : 80))
  end

  def proxy_class(proxy)
    if proxy.uri.scheme == "socks"
      TCPSocket.socks_username = proxy[:user] if proxy[:user]
      TCPSocket.socks_password = proxy[:password] if proxy[:password]
      Net::HTTP::SOCKSProxy(proxy[:uri].host, proxy[:uri].port)
    else
      Net::HTTP::Proxy(proxy[:uri].host, proxy[:uri].port, proxy[:uri].user, proxy[:uri].password)
    end
  end
end

Alle 9 Kommentare

Ich konnte es beheben, indem ich Faraday::Adapter::NetHttp patchte, aber ich bin mir nicht sicher, ob das die beste Entscheidung war

Hallo @yarafan , danke für die Meldung.
Darf ich dich fragen, wie du Faraday::Adapter::NetHttp gepatcht hast?

Ich benutze Gem 'Socksify'

require "socksify/http"

class Faraday::Adapter::NetHttp
  def net_http_connection(env)
    if (proxy = env[:request][:proxy])
      proxy_class(proxy)
    else
      Net::HTTP
    end.new(env[:url].hostname, env[:url].port || (env[:url].scheme == "https" ? 443 : 80))
  end

  def proxy_class(proxy)
    if proxy.uri.scheme == "socks"
      TCPSocket.socks_username = proxy[:user] if proxy[:user]
      TCPSocket.socks_password = proxy[:password] if proxy[:password]
      Net::HTTP::SOCKSProxy(proxy[:uri].host, proxy[:uri].port)
    else
      Net::HTTP::Proxy(proxy[:uri].host, proxy[:uri].port, proxy[:uri].user, proxy[:uri].password)
    end
  end
end

@yarafan Ich verstehe, also unterstützt Net::HTTP im Grunde genommen keinen SOCKS-Proxy sofort.
In diesem Fall würde ich das nicht als Bug einstufen, sondern eher als Feature-Request zur Unterstützung von Socks-Proxys.
Wie jede andere Funktionsanfrage sollte dies für alle Adapter im aktuellen 0.x-Zweig gelöst werden, aber für den v1.0-Zweig verschieben wir alle Adapter aus Faraday heraus und behalten nur Net::HTTP bei.
Das wird ein guter Zeitpunkt sein, das vorzustellen 👍

Ich werde den Titel aktualisieren und das Problem kennzeichnen. Wenn jemand vorher Socken-Proxys verwenden muss, kann er Ihren Monkey-Patch verwenden

Authentifizierungsunterstützung zu Net::HTTP.SOCKSProxy hinzugefügt
https://github.com/astro/socksify-ruby/pull/24/files

Ich suche genau das zu tun

Gute Arbeit @yarafan

Hi. Wie ist der Stand dieser Funktion? Ist es noch in der Entwicklung?
Ich wäre sehr daran interessiert, dafür keinen Affenpatch verwenden zu müssen

@gcolson yes @technoweenie hat den größten Teil der Arbeit bereits erledigt 🎉
Leider warten wir derzeit jedoch darauf, dass ein abhängiger PR zusammengeführt wird, siehe meinen Kommentar: https://github.com/lostisland/faraday/pull/992#issuecomment -508437342

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen