I can't seem to get Faraday.get
to accept the user:pass@host syntax from a url and respect it. ΠΠ°ΠΆΠ΅ΡΡΡ, Ρ Π½Π΅ ΠΌΠΎΠ³Ρ Π·Π°ΡΡΠ°Π²ΠΈΡΡ Faraday.get
ΠΏΡΠΈΠ½ΡΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ user:pass@host ΠΈΠ· URL-Π°Π΄ΡΠ΅ΡΠ° ΠΈ ΡΠ²Π°ΠΆΠ°ΡΡ Π΅Π³ΠΎ.
Reproducing with Faraday 0.9.0 ΠΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ Π€Π°ΡΠ°Π΄Π΅Π΅ΠΌ 0.9.0
Faraday.get("http://foo:bar<strong i="9">@localhost</strong>:3333/test")
The "server" Π‘Π΅ΡΠ²Π΅Ρ"
% nc -l localhost 3333
GET /test HTTP/1.1
User-Agent: Faraday v0.9.0
Accept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
Accept: */*
Connection: close
Host: localhost:3333
I expected an Authentication header, or perhaps an error that auth wasn't supported. Π― ΠΎΠΆΠΈΠ΄Π°Π» Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΈΠ»ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΎΡΠΈΠ±ΠΊΡ, ΡΡΠΎ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ.
I couldn't find docs on the Faraday.get
method on rubydoc.info for the Faraday module: http://www.rubydoc.info/gems/faraday/Faraday - so I'm not sure what I'm doing wrong. Π― Π½Π΅ ΡΠΌΠΎΠ³ Π½Π°ΠΉΡΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΡ ΠΏΠΎ ΠΌΠ΅ΡΠΎΠ΄Ρ Faraday.get
Π½Π° ΡΠ°ΠΉΡΠ΅ rubydoc.info Π΄Π»Ρ ΠΌΠΎΠ΄ΡΠ»Ρ Π€Π°ΡΠ°Π΄Π΅Ρ: http://www.rubydoc.info/gems/faraday/Faraday , ΠΏΠΎΡΡΠΎΠΌΡ Ρ Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½, ΡΡΠΎ Ρ Π΄Π΅Π»Π°ΡΡ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ.
If you point me in the write direction, I am happy to write documentation for this method. ΠΡΠ»ΠΈ Π²Ρ ΡΠΊΠ°ΠΆΠ΅ΡΠ΅ ΠΌΠ½Π΅ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π·Π°ΠΏΠΈΡΠΈ, Ρ Ρ ΡΠ΄ΠΎΠ²ΠΎΠ»ΡΡΡΠ²ΠΈΠ΅ΠΌ Π½Π°ΠΏΠΈΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°.
enThere are several ways you can set authentication headers with Faraday. Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Faraday. One way is to initialize a Faraday::Connection
instance and use the basic_auth
helper method: ΠΠ΄ΠΈΠ½ ΠΈΠ· ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² β ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ Faraday::Connection
ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ basic_auth
:
conn = Faraday.new(url: 'http://example.com') # create a new Connection with base URL
conn.basic_auth('user', 'pass') # set the Authentication header
conn.get('/foo') # GET http://example.com/foo
You could also use middleware: ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΠΎΠ΅ ΠΠ:
conn = Faraday.new(url: 'http://example.com') do |builder|
builder.use Faraday::Request::Retry
builder.use Faraday::Request::BasicAuthentication, 'user', 'pass'
builder.use Faraday::Response::Logger
builder.use Faraday::Adapter::NetHttp
end
conn.get('/foo')
or: ΠΈΠ»ΠΈ:
Faraday.new(url: 'http://example.com') do |builder|
builder.request :retry
builder.request :basic_authentication, 'user', 'pass'
builder.response :logger
builder.adapter :net_http
end
conn.get('/foo')
Intridea has a nice blog post on basic Faraday usage that's a few years old but still relevant. Π£ Intridea Π΅ΡΡΡ Ρ ΠΎΡΠΎΡΠΈΠΉ ΠΏΠΎΡΡ Π² Π±Π»ΠΎΠ³Π΅ ΠΎΠ± ΠΎΡΠ½ΠΎΠ²Π°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π€Π°ΡΠ°Π΄Π΅Ρ, ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π»Π΅Ρ, Π½ΠΎ ΠΎΠ½ Π²ΡΠ΅ Π΅ΡΠ΅ Π°ΠΊΡΡΠ°Π»Π΅Π½.
Hope it helps some, ΠΠ°Π΄Π΅ΡΡΡ, ΡΡΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌ,
OI ΠΠ
Thanks @OI for the helpful examples. Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ @OI Π·Π° ΠΏΠΎΠ»Π΅Π·Π½ΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ.
@jordansissel For now, please use this form: @jordansisssel Π ΠΏΠΎΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΡΡ ΡΠΎΡΠΌΡ:
conn = Faraday.new('http://example.com')
conn.basic_auth('user', 'pass')
conn.get('/foo')
Sorry for the trouble. ΠΠ·Π²ΠΈΠ½ΠΈΡΠ΅ Π·Π° Π±Π΅ΡΠΏΠΎΠΊΠΎΠΉΡΡΠ²ΠΎ.
enThanks for the pointers, all! ΠΡΠ΅ΠΌ ΡΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠΈ! It helped me get things working. ΠΡΠΎ ΠΏΠΎΠΌΠΎΠ³Π»ΠΎ ΠΌΠ½Π΅ Π·Π°ΡΡΠ°Π²ΠΈΡΡ Π²Π΅ΡΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ. β€οΈβ€οΈβ€οΈ β€οΈβ€οΈβ€οΈ
On Tuesday, October 6, 2015, Mislav MarohniΔ [email protected] ΠΠΎ Π²ΡΠΎΡΠ½ΠΈΠΊ, 6 ΠΎΠΊΡΡΠ±ΡΡ 2015 Π³., ΠΠΈΡΠ»Π°Π² ΠΠ°ΡΠΎΡ
Π½ΠΈΡ, ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡ Π½Π° Π°Π΄ΡΠ΅Ρ github.com.
wrote: Π½Π°ΠΏΠΈΡΠ°Π»:
enThanks @OI https://github.com/OI for the helpful examples. Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ @OI https://github.com/OI Π·Π° ΠΏΠΎΠ»Π΅Π·Π½ΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ.
@jordansissel https://github.com/jordansissel For now, please use this @jordansisssel https://github.com/jordansisssel Π ΠΏΠΎΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΡΠΎ
form: ΡΠΎΡΠΌΠ°:conn = Faraday.new('http://example.com') conn = Faraday.new('http://example.com')
conn.basic_auth('user', 'pass') conn.basic_auth('ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ', 'ΠΏΡΠΎΡ ΠΎΠ΄')
conn.get('/foo') conn.get('/foo')Sorry for the trouble. ΠΠ·Π²ΠΈΠ½ΠΈΡΠ΅ Π·Π° Π±Π΅ΡΠΏΠΎΠΊΠΎΠΉΡΡΠ²ΠΎ.
β β
Reply to this email directly or view it on GitHub ΠΡΠ²Π΅ΡΡΡΠ΅ Π½Π° ΡΡΠΎ ΠΏΠΈΡΡΠΌΠΎ Π½Π°ΠΏΡΡΠΌΡΡ ΠΈΠ»ΠΈ ΠΏΡΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ Π΅Π³ΠΎ Π½Π° GitHub
https://github.com/lostisland/faraday/issues/426#issuecomment -145914646. https://github.com/lostisland/faraday/issues/426#issuecomment-145914646 .
ΠΠ± ΡΡΠΎΠΌ ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΠΎΠ±ΡΠ°Π»ΠΎΡΡ ΠΏΠΎΠ΄ Π½ΠΎΠΌΠ΅ΡΠΎΠΌ 343.
enΠΏΡΠΎΡΠ΅:
Faraday.get('http://localhost:3000', nil, authorization: "Bearer 1123")
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
ΠΏΡΠΎΡΠ΅:
enFaraday.get('http://localhost:3000', nil, authorization: "Bearer 1123")