Faraday: Proksi Faraday dan kaus kaki dengan dukungan auth

Dibuat pada 11 Apr 2018  ·  9Komentar  ·  Sumber: lostisland/faraday

Info dasar

  • Versi Faraday: 0.14, adaptor Net::HTTP
  • Versi Ruby: 2.3.1

    Deskripsi masalah

Menggunakan proxy kaus kaki dengan auth mengarah ke Faraday::ConnectionFailed: akhir file tercapai

Langkah-langkah untuk mereproduksi

Inisialisasi Faraday

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

dan buat permintaan apa pun

feature v1.0

Komentar yang paling membantu

saya menggunakan permata '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

Semua 9 komentar

Saya dapat memperbaikinya dengan menambal monyet Faraday::Adapter::NetHttp, tetapi saya tidak yakin itu keputusan terbaik

Hai @yarafan , terima kasih telah melaporkan.
Bisakah saya bertanya bagaimana Anda menambal monyet Faraday::Adapter::NetHttp ?

saya menggunakan permata '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 saya mengerti, jadi pada dasarnya Net::HTTP tidak mendukung proxy kaus kaki out-of-the-box.
Dalam hal ini saya tidak akan mengklasifikasikan ini sebagai bug, tetapi lebih sebagai permintaan fitur untuk mendukung proxy kaus kaki.
Seperti permintaan fitur lainnya, ini harus diselesaikan untuk semua adaptor di cabang 0.x saat ini, namun untuk cabang v1.0 kami memindahkan semua adaptor keluar dari faraday dan hanya menyimpan Net::HTTP.
Itu akan menjadi saat yang tepat untuk memperkenalkan ini 👍

Saya akan memperbarui judul dan memberi label Masalah, jika ada yang perlu menggunakan proxy kaus kaki sebelum itu, mereka dapat menggunakan patch monyet Anda

Tambahkan dukungan otentikasi ke Net::HTTP.SOCKSProxy
https://github.com/astro/socksify-ruby/pull/24/files

Saya mencari untuk melakukan hal ini

Kerja bagus @yarafan

Hai, yang di sana. Apa status tentang fitur ini? Apakah masih dalam pengembangan?
Saya akan sangat tertarik untuk tidak menggunakan tambalan monyet untuk melakukan ini

@gcolson ya @technoweenie sudah melakukan sebagian besar pekerjaan
Sayangnya, bagaimanapun, kami sedang menunggu PR dependen untuk digabungkan, lihat komentar saya: https://github.com/lostisland/faraday/pull/992#issuecomment -508437342

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

luizkowalski picture luizkowalski  ·  3Komentar

t3hk0d3 picture t3hk0d3  ·  3Komentar

yykamei picture yykamei  ·  4Komentar

subvertallchris picture subvertallchris  ·  5Komentar

jordansissel picture jordansissel  ·  5Komentar