1.7.1
3.0.2
μ¬μ© μ€λ¨ κ²½κ³ λ₯Ό νμΈνκ³ λ¬Έμνλ κΈ°λ³Έ μΈμ¦ μ§μΉ¨ κ³Ό μΌμΉνλλ‘ μ½λλ₯Ό μ λ°μ΄νΈνμ΅λλ€. λ¬Έμνλ μ½λμμ μ¬λ¬ μΈμ μ€λ₯κ° λ°μν©λλ€.
λ¬Έμκ° μλͺ»λμκ±°λ 보μμ λ¬Έμ κ° μλμ§ νμ€νμ§ μμ΅λλ€.
http = Faraday.new do |conn|
conn.request(:authorization, :basic, 'username', 'password')
end
http.post("https://example.com")
ArgumentError: wrong number of arguments (given 4, expected 3)
from /Users/mscoutermarsh/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/faraday-1.7.1/lib/faraday/request/authorization.rb:43:in `initialize'
λ¬Έμκ° μλͺ»λμμ΅λλ€ :) λ°©κΈ PRμ μ΄μ΄ μμ νμ΅λλ€.
κ·Έλμ λ€μκ³Ό κ°μ΄ μ¬μ©ν΄μΌ ν©λλ€.
http = Faraday.new do |conn|
conn.request(:basic_auth, 'username', 'password')
end
μ¬λ³΄μΈμ! 1.x μ§μ μ€λ¨ λ©μμ§μ μΌμΉνμ§ μλ λ¬Έμ μΉ μ¬μ΄νΈμ 컨ν μ€νΈλ "λͺ¨λ μΉ μ¬μ΄νΈ λ¬Έμλ 곧 μΆμλ 2.0μ λλ€."μ λλ€. κΈ°μ‘΄ λ°©μμ΄ μ κ±°λ λ²μ μ λλ€.
컨ν μ€νΈλ READMEμμλ§ μΈκΈλ©λλ€. μ΄κ²μ μΉμ¬μ΄νΈ μ λ©΄μμ ꡬ체μ μΈ λμμ λ°κ³ μΆμ μ½μ μ λλ€.
ν΄λΉ λΆλΆμ λν λ§ν¬:
@peterberkenbosch κ° μ νν©λλ€. Faraday 1.xμμ λ―Έλ€μ¨μ΄λ₯Ό μ¬μ©νλ μ¬λ°λ₯Έ λ°©λ²μ΄λ©° λ¬Έμμλ λ€κ°μ€λ v2.0μ λν μ¬λ°λ₯Έ μ¬μ©λ²μ΄ λμ μμ΅λλ€.
νΌλμ λλ € μ£μ‘ν©λλ€. μ΄μ κ°μ λ¬Έμ κ° μ κΈ°λ κ²μ μ΄λ²μ΄ μ²μμ΄ μλλλ€. μν©μ λ λͺ ννκ² νκΈ° μν΄ λΉ λ₯Έ μ루μ μ μ΄ν΄λ³΄κ² μ΅λλ€.
κ°μ¬ν©λλ€! μ΄μ λͺ¨λ κ²μ΄ μ’μ΅λλ€. β€οΈ
μλ νμΈμ @iMacTia ,
μ΄ λ¬Έμ μ μ¬μ ν λ¬Έμ κ° μμ΅λλ€.
μ λ ν¨λ¬λ°μ΄ 1.7.1κ³Ό λ£¨λΉ 2.7.2λ₯Ό μ¬μ©νκ³ μμ΅λλ€.
λλ μλ μ΄λ° μ°κ²°μ λ§λ€μμ΅λλ€.
client = Faraday.new(url: url) do |faraday|
faraday.headers["Accept"] = "application/json"
faraday.headers["X-Version"] = "2"
faraday.headers["Authorization"] = "token #{token}"
faraday.request(:json)
faraday.response(:json, content_type: /\bjson$/)
faraday.adapter(Faraday.default_adapter)
end
μμ μ΄μΌκΈ°λ₯Ό λ°νμΌλ‘ faraday.request(:token_auth, token)λ₯Ό μ¬μ©νλλ‘ μ ννλ©΄ μμ²μ ν€λλ₯Ό μΆκ°νλ λ° λμμ΄ λ κ²μ΄λ―λ‘ λ€μμΌλ‘ μ ννμ΅λλ€.
client = Faraday.new(url: url) do |faraday|
faraday.headers["Accept"] = "application/json"
faraday.headers["X-Version"] = "2"
faraday.request(:token_auth, token)
faraday.request(:json)
faraday.response(:json, content_type: /\bjson$/)
faraday.adapter(Faraday.default_adapter)
end
μμ ν΄λΌμ΄μΈνΈλ μ΄λ° μμΌλ‘ μ¬μ©λλ©° "errors"=>["Authentication Required"]
μ€λ₯κ° λ°μ
client.get(path, {"sort"=>"created_at", "direction"=>"desc", "per_page"=>100})
λν μ½λλ₯Ό λλ²κΉ
νλλ° μ΄λ»κ² λ λ―Έλ€μ¨μ΄κ° μμ²μ μ μ©λμ§ μμκ³ ν€λμ Authorization
κ° μμ΅λλ€. μ¬κΈ°μ νλμ μμ² κ°μ²΄ λ€νκ° μμ΅λλ€.
#<struct Faraday::Request http_method=:get, path="hide/the/path", params={"sort"=>"created_at", "direction"=>"desc", "per_page"=>100}, headers={"Accept"=>"application/json;", "X-Version"=>"2", "User-Agent"=>"Faraday v1.7.1"}, body=nil, options=#<Faraday::RequestOptions (empty)>>
μλͺ»λ λ°©μμΌλ‘ μ¬μ©νμ΅λκΉ? μλλ©΄ μ λ²κ·Έλ₯Ό λ§λ€μ΄μΌ ν©λκΉ?
BTW, faraday.headers["Authorization"] = "token #{token}"
μ faraday.request(:token_auth, token)
μ μ°¨μ΄μ μ 무μμ
λκΉ? λ΄ μ΄λ³΄μ λ£¨λΉ μ§μκ³Ό μμ€ μ½λ μ½κΈ°λ₯Ό κΈ°λ°μΌλ‘ token_auth
λ faraday.headers[]=
ν΄λΉνλ ν€λλ₯Ό μ€μ νλ €κ³ ν©λλ€. κ·Έλ λ€λ©΄ λ¬Έμμμ ν€λλ₯Ό μ§μ μ€μ νλ λμ λ―Έλ€μ¨μ΄λ₯Ό μ¬μ©νλ κ²μ κΆμ₯νλ μ΄μ λ 무μμ
λκΉ?
@xiaoxipang λ, μ’μ μ§λ¬Έμ΄ λ§μ΄ μμ΅λλ€. μ κ° λͺ¨λ λ΅ν μ μλμ§ νμΈν΄ λ³΄κ² μ΅λλ€.
μλͺ»λ λ°©μμΌλ‘ μ¬μ©νμ΅λκΉ? μλλ©΄ μ λ²κ·Έλ₯Ό λ§λ€μ΄μΌ ν©λκΉ?
μ¬λ°λ₯΄κ² μ¬μ©νμ§λ§ λ―Έλ€μ¨μ΄μ μΆλ ₯μ΄ μλ²μμ κΈ°λνλ κ²κ³Ό μ νν μΌμΉνμ§ μλ κ² κ°μ΅λλ€.
μ΄ "ν ν° μΈμ¦"μ λ μ΄μ μ¬μ©λμ§ μκ³ Bearer ν ν° λ° κΈ°ν λ©μ»€λμ¦μΌλ‘ λ체λ κ½€ μ€λλ νμ€μ²λΌ 보μ
λλ€. κ·νμ μμμ ν€λ μΆλ ₯μ Authorization: Token token=token
. token=
μ λμ¬μ μ μνμμμ€. κ·νμ μλ²κ° μμνμ§ λͺ»νλ κ²μΌλ‘ μκ°λ©λλ€. μ΄ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ λμ λ€μμ μνν μ μμ΅λλ€.
client = Faraday.new(url: url) do |faraday|
#Β This header is not necessary, it will be set by the json middleware
# faraday.headers["Accept"] = "application/json"
faraday.headers["X-Version"] = "2"
faraday.request(:authorization, 'Token', token)
faraday.request(:json)
faraday.response(:json, content_type: /\bjson$/)
faraday.adapter(Faraday.default_adapter)
end
μ΄λ κ² νλ©΄ ν€λκ° Authorization: Token token
(μ λμ¬ μμ)λ‘ μ¬λ°λ₯΄κ² μ€μ λ©λλ€.
μλν΄ λ³΄μκ³ ν¨κ³Όκ° μμΌλ©΄ μλ €μ£ΌμΈμ!
λν μ½λλ₯Ό λλ²κΉ νλλ° μ΄λ»κ² λ λ―Έλ€μ¨μ΄κ° μμ²μ μ μ©λμ§ μμκ³ ν€λμ κΆν λΆμ¬κ° μμ΅λλ€. μ¬κΈ°μ νλμ μμ² κ°μ²΄ λ€νκ° μμ΅λλ€.
μ΄μν©λλ€. λ°©κΈ μμ μ½λλ₯Ό ν
μ€νΈνλλ° μμλλ‘ μλν©λλ€. λλ²κΉ
μμ struct Faraday::Request
λ₯Ό 보면 ν€λκ° λ―Έλ€μ¨μ΄μ μν΄ μ€μ λκΈ° μ μ κ°μ²΄λ₯Ό λ무 μΌμ° λ³΄κ³ μλ κ² κ°μ΅λλ€.
μμ²μ μ€ννκ³ μλ΅μ νμΈνλ©΄ λΆλͺ
ν κ±°κΈ°μ νμλμ΄μΌ ν©λλ€.
client.get('https://google.co.uk')
=> #<Faraday::Response:0x00007fdd01ad1340
@on_complete_callbacks=[],
@env=#<Faraday::Env
@method=:get
@url=#<URI::HTTPS https://google.co.uk/>
@request=#<Faraday::RequestOptions (empty)>
@request_headers={"X-Version"=>"2", "User-Agent"=>"Faraday v1.7.1", "Authorization"=>"Token token"}
...
λλ λ€λ₯Έ λ°©λ²μ μ΄λν° λ°λ‘ μμ faraday.response :logger
λ―Έλ€μ¨μ΄λ₯Ό μΆκ°νλ κ²μ
λλ€. μ΄λ κ² νλ©΄ λͺ¨λ λ―Έλ€μ¨μ΄κ° μ μ©λ ν μμ²μ κΈ°λ‘νκ³ λΆλͺ
ν νμΈν΄μΌ ν©λλ€.
BTW, faraday.headers["Authorization"] = "token #{token}"κ³Ό faraday.request(:token_auth, token)μ μ°¨μ΄μ μ 무μμ λκΉ? λ΄ μ΄λ³΄μ λ£¨λΉ μ§μκ³Ό μμ€ μ½λ μ½κΈ°λ₯Ό κΈ°λ°μΌλ‘ token_authλ ν€λλ₯Ό μ€μ νλ €κ³ νλ©° μ΄λ faraday.headers[]=μ λμΌν©λλ€. κ·Έλ λ€λ©΄ λ¬Έμμμ ν€λλ₯Ό μ§μ μ€μ νλ λμ λ―Έλ€μ¨μ΄λ₯Ό μ¬μ©νλ κ²μ κΆμ₯νλ μ΄μ λ 무μμ λκΉ?
κ·Έ μ μμ μ£Όλ μ΄μ λ λ―Έλ€μ¨μ΄κ° μΌλ°μ μΌλ‘ λ λμ κΈ°λ₯μ μ 곡νκΈ° λλ¬Έμ
λλ€.
μλ₯Ό λ€μ΄ token_auth
λ―Έλ€μ¨μ΄λ₯Ό μ¬μ©νλ©΄ ν ν° μμ±λ μ€μ νκ³ μλμΌλ‘ νμμ μ§μ ν μ μμ΅λλ€.
faraday.request(:token_auth, 'token', {prop1: value1, prop2: value2})
# This produces `Authorization: Token token=token prop1=value1 prop2=value2
λΉμ·ν λ°©μμΌλ‘ basic_auth
λ―Έλ€μ¨μ΄λ μ¬μ©μ/ν¨μ€ μμ Base64 μΈμ½λ©μ μλμΌλ‘ μνν©λλ€.
μμ faraday.request(:authorization, 'Token', token)
λ―Έλ€μ¨μ΄λ ν€λλ₯Ό μλμΌλ‘ μ€μ νλ κ² μ΄μμ μννμ§ μλλ€λ λ° λμνμ§λ§, μλ₯Ό λ€μ΄ Faraday v2μμ λ―Έλ€μ¨μ΄λ token
μΈμμ λν΄ λλ€/νλ‘μμ λ₯Ό μλ½νκ³ κ°κ°μμ μλμΌλ‘ ν΄κ²°ν©λλ€. μꡬ. μ΄λ₯Ό ν΅ν΄ TokenStorage
ν΄λμ€λ₯Ό κ°μ§ μ μκ³ λ€λ₯Έ μμ² κ°μ ν ν°μ λμ μΌλ‘ λ³κ²½ν μ μμ΅λλ€. λ€λ₯Έ μ κ·Ό λ°©μμ μ¬μ©νλ©΄ κ° μμ²μ ν€λλ₯Ό μλμΌλ‘ μ½μ
νκ±°λ λ§€λ² μ°κ²°μ λ€μ μμ±ν΄μΌ ν©λλ€.
μ΄κ²μ΄ κ·νμ μ§λ¬Έμ λν λ΅λ³μ΄ λκΈ°λ₯Ό λ°λλλ€. νμ§λ§ κ°λ¨ν λ§ν΄μ λ κ°μ§ λ°©λ²μ λͺ¨λ μ¬μ©νλ κ²μ΄ μ’μΌλ―λ‘ κ°μ₯ μ’μνλ λ°©λ²μ μ¬μ©νμμμ€ π
@iMacTia λμκ³Ό μμΈν μ€λͺ μ λ§ κ°μ¬ν©λλ€!
μλν΄ λ³΄μκ³ ν¨κ³Όκ° μμΌλ©΄ μλ €μ£ΌμΈμ!
faraday.request(:authorization, "token", token)
λ μ μκ² ν¨κ³Όμ μ
λλ€.
λλ λ€λ₯Έ λ°©λ²μ faraday.response :logger λ―Έλ€μ¨μ΄λ₯Ό μ΄λν° λ°λ‘ μμ μΆκ°νλ κ²μ λλ€. μ΄λ κ² νλ©΄
λͺ¨λ λ―Έλ€μ¨μ΄κ° μ μ©λ ν μμ²νκ³ νμ€ν νμΈν΄μΌ ν©λλ€.
μ§κΈλΆν° λλ²κΉ
νλ λ°©λ²μ μλ κ²μ΄ λ§€μ° μ’μ΅λλ€. κ·Έλ¦¬κ³ κ·Έκ²μ μ¬μ©ν¨μΌλ‘μ¨ λΉμ μ μμ ν μ νν©λλ€.
faraday.request(:authorization, "token", token)
μ¬μ©ν λ ν€λλ Authorization: "token token_value"
faraday.request(:token_auth, token)
μ¬μ©ν λ ν€λλ Authorization: "Token token=\"token_value\""
μ΄μν©λλ€. λ°©κΈ μμ μ½λλ₯Ό ν μ€νΈνλλ° μμλλ‘ μλν©λλ€. λλ²κΉ μμ Faraday::Request ꡬ쑰체λ₯Ό 보면 ν€λκ° λ―Έλ€μ¨μ΄μ μν΄ μ€μ λκΈ° μ μ κ°μ²΄λ₯Ό λ무 μΌμ° λ³΄κ³ μλ κ² κ°μ΅λλ€.
λ€, connection#run_request
μ breakpointλ₯Ό λ£μλλ° κ·Έ μκ° λ―Έλ€μ¨μ΄κ° νΈμΆλμ§ μμμ΅λλ€. Faraday::Request::Authorizationμ μλ‘μ΄ μ€λ¨μ μ μΆκ°νκ³ μ΄μ μλ λ°©μμ λ³Ό μ μμ΅λλ€.
μ΄κ²μ΄ κ·νμ μ§λ¬Έμ λν λ΅λ³μ΄ λμκΈ°λ₯Ό λ°λλλ€. κ·Έλ¬λ κ°λ¨ν λ§ν΄μ λ κ°μ§ λ°©λ²μ λͺ¨λ μ¬μ©ν μ μμΌλ―λ‘ κ°μ₯ μ’μνλ λ°©λ²μ μ¬μ©νμμμ€.
λ€ κ·Έλ¦¬κ³ λ€μ νλ² κ°μ¬λ립λλ€!
μ§κΈμ μ¬μ© μ€λ¨ κ²½κ³ λ₯Ό μ κ±°νλ λ°©λ²μ 무μμ λκΉ?
builder.request :basic_auth, <strong i="6">@client_id</strong>, <strong i="7">@client_secret</strong>
μ¬μ ν 1.7.1μμ κ²½κ³ κ° λ°μνκ³ @mscoutermarshκ° μΈκΈνλ―μ΄ μ ꡬ문μ μμ§ μ¬μ©ν μ μμ΅λλ€.
@paukul
http = Faraday.new do |conn|
conn.request(:basic_auth, 'username', 'password')
end
μ°λ¦¬λ₯Ό μν΄ κ·Έκ²μ κ³ μ³€μ΅λλ€. κ·νμ λμΌνκ² λ³΄μ΄μ§λ§ μ¬μ ν κ²½κ³ λ₯Ό νμνλ μ΄μ λ₯Ό λͺ¨λ₯΄κ² μ΅λλ€.