2014-01-22 2 views
6

는 다음 코드 이런 식으로 로그에서와 같이 불행하게도 PARAM 인코딩됩니다패러데이 요청에 대한 인코딩 요청을 피하는 방법은 무엇입니까?

conn = Faraday.new(:url => 'http://www.mapquestapi.com') do |faraday| 
faraday.response :logger     # log requests to STDOUT 
faraday.adapter Faraday.default_adapter # make requests with Net::HTTP 
faraday.options.params_encoder = Faraday::FlatParamsEncoder 
end 

response = conn.get do |req| 
    req.url '/geocoding/v1/batch' 
    req.params['key'] = 'xxxxx%7xxxxxxxxx%2xxxx%3xxxx-xxxx' 
    req.params['location'] = addresses[0] 
end 

에게이 키 = xxxxx는 % 257xxxxxxxxx % 252xxxx %의 원인이 253xxxx-XXXX, 그지도가 API를 응답 에 나는 것을 방지 할 수있는 방법의 핵심 PARAM은 %를 암호화하지 않고 전송해야한다 (내가 우체부와 함께 시도하고 작동으로 인해 인코딩) 잘못된 키

I, [2014-01-22T19:16:17.949640 #93669] INFO -- : get http://www.mapquestapi.com/geocoding/v1/batch?key=xxxxx%257xxxxxxxxx%252xxxx%253xxxx-xxxx&location=1047+East+40th+Avenue%2C+Vancouver%2C+BC+V5W+1M5%2C+Canada 
D, [2014-01-22T19:16:17.949778 #93669] DEBUG -- request: User-Agent: "Faraday v0.9.0" 
accept-encoding: "" 
I, [2014-01-22T19:16:19.038914 #93669] INFO -- Status: 200 
D, [2014-01-22T19:16:19.039043 #93669] DEBUG -- response: server: "Apache-Coyote/1.1" 
set-cookie: "JSESSIONID=AD0A86636DAAD3324316A454354F; Path=/; HttpOnly" 

와 이 문제가 발생하지 않습니다.이 동작을 변경하는 매개 변수를 찾지 못했습니다.

Im 패러데이 0.9.0, 루비 2.0을 사용합니다. 나는 내가 위해 RESTClient 보석에 의존지도가 라이브러리를 사용할 수 있습니다 알고 있지만 내가이 코딩 시간을 보냈다했습니다 것처럼 패러데이

+1

이 문제를 해결할 수 있었습니까? – tomascharad

+1

정말 늦은 답장을 보내 주셔서 죄송합니다. 통지를받지 못했습니다. 나는 그것을 풀 수 있었다. 나는 이안의 대답이 올바른 것이라고 생각한다. –

답변

3

이는 부분적인 대답으로 작동하게하는 방법 좋은 것 :

value 필드가 이스케이프되지 않게하려면 자체 param_encorder를 만드는 것이 가능합니다. 이것은 [email protected]/gems/faraday-0.9.0/lib/faraday/connection.rb

class DoNotEncoder 
    def self.encode(params) 
    buffer = '' 
    params.each do |key, value| 
     buffer << "#{key}=#{value}&" 
    end 
    return buffer.chop 
    end 
end 

conn = Faraday.new(:url => 'http://www.mapquestapi.com') do |faraday| 
faraday.response :logger     # log requests to STDOUT 
faraday.adapter Faraday.default_adapter # make requests with Net::HTTP 
#faraday.options.params_encoder = Faraday::FlatParamsEncoder 
faraday.options.params_encoder = DoNotEncoder 
end 

그러나 (방법 build_exclusive_url 참조) 여기에 익숙해! 쿼리 문자열 쿼리 텍스트 확인 (check_query 방법 참조) 실패 루비 2.0.0-p247/lib 디렉토리/루비/2.0.0/URI/generic.rb

내가 때문에 뭔가 다른 실패 의심 . 사이트가 CSRF를 사용하고 있습니까, 아니면 쿠키를 캡처하여 요청에 포함시켜야합니까?

CSRF를 사용해야하는 경우 코드 예제로 https://gist.github.com/chrisZingel/9042812을 확인하십시오.

2

패러데이를 요구 한 후에 추가하십시오.

module Faraday 
    module NestedParamsEncoder 
    def self.escape(arg) 
     arg 
    end 
    end 
    module FlatParamsEncoder 
    def self.escape(arg) 
     arg 
    end 
    end 
end 
+0

이것은 정답이어야한다. –

관련 문제