2014-07-20 2 views
0

안녕하세요 개발자 커뮤니티,구문 분석 오류 프록시

내가 AWS Cloudsearch을 사용하고 있습니다 (API 버전 : 2011-02-01) 뒤에 요청을 할 때 업로드하고 난을 의미 Heroku가에 살고 앱에서 검색하는 것을 시도 화이트리스트를 작성할 수 있도록 고정 IP가있는 프록시가 필요하지만 문제가 발생합니다 ...

Proximo라는 Heroku 애드온을 사용하고 있습니다. 여기에 위해 RESTClient로를 설정하는 Heroku가의 코드 예제입니다 :

require "rest-client" 

RestClient.proxy = ENV["PROXIMO_URL"] if ENV["PROXIMO_URL"] 

res = RestClient.get("http://api.someservice.com/endpoint") 

puts "status code", res.code 
puts "headers", res.headers 

내가 요청을 할 패러데이를 사용하는 aws_cloud_search 보석을 사용하고, 메신저 내 패치 CloudSearch에서 적절한 응답을 얻기 위해 고군분투

# aws_cloud_search.rb 

def self.create_connection(url, aws_access_key_id=nil, aws_secret_access_key=nil) 

    options = ENV['PROXIMO_URL'] ? { proxy: ENV['PROXIMO_URL'] } : {} 

    connection = Faraday.new url, options do |builder| 
     builder.use AWSCloudSearch::HttpCodeResponseMiddleware 
     builder.use FaradayMiddleware::EncodeJson 
     builder.use FaradayMiddleware::ParseJson 
     builder.adapter Faraday.default_adapter 
     builder.proxy ENV['PROXIMO_URL'] if ENV['PROXIMO_URL'] 
    end 
    connection.headers['User-Agent'] = "AWSCloudSearch-Ruby-Client/#{VERSION}" 
    connection 
    end 

here (다른 곳에서도) 보이는 패치 작업의 많은 조합을 사용해 보았습니다. 나는 (그들이 제안으로) 포트 (80) 프록시 모에서 제공하는 IP 주소와 프록시를 설정할 때, 나는 다음을 얻을 :

Faraday::Error::ParsingError: 757: unexpected token at 'invalid' 
from /app/vendor/bundle/ruby/2.0.0/gems/json-1.6.8/lib/json/common.rb:149:in `parse' 
from /app/vendor/bundle/ruby/2.0.0/gems/json-1.6.8/lib/json/common.rb:149:in `parse' 
from /app/vendor/bundle/ruby/2.0.0/gems/faraday_middleware-0.9.1/lib/faraday_middleware/response/parse_json.rb:11:in `block in <class:ParseJson>' 
from /app/vendor/bundle/ruby/2.0.0/gems/faraday_middleware-0.9.1/lib/faraday_middleware/response_middleware.rb:48:in `call' 
from /app/vendor/bundle/ruby/2.0.0/gems/faraday_middleware-0.9.1/lib/faraday_middleware/response_middleware.rb:48:in `parse' 
from /app/vendor/bundle/ruby/2.0.0/gems/faraday_middleware-0.9.1/lib/faraday_middleware/response_middleware.rb:39:in `process_response' 
from /app/vendor/bundle/ruby/2.0.0/gems/faraday_middleware-0.9.1/lib/faraday_middleware/response_middleware.rb:32:in `block in call' 
from /app/vendor/bundle/ruby/2.0.0/gems/faraday-0.8.1/lib/faraday/response.rb:63:in `on_complete' 
from /app/vendor/bundle/ruby/2.0.0/gems/faraday_middleware-0.9.1/lib/faraday_middleware/response_middleware.rb:30:in `call' 
from /app/vendor/bundle/ruby/2.0.0/gems/faraday_middleware-0.9.1/lib/faraday_middleware/request/encode_json.rb:23:in `call' 
from /app/vendor/bundle/ruby/2.0.0/gems/faraday-0.8.1/lib/faraday/response.rb:8:in `call' 
from /app/vendor/bundle/ruby/2.0.0/gems/faraday-0.8.1/lib/faraday/connection.rb:226:in `run_request' 
from /app/vendor/bundle/ruby/2.0.0/gems/faraday-0.8.1/lib/faraday/connection.rb:99:in `post' 
from /app/vendor/bundle/ruby/2.0.0/bundler/gems/aws_cloud_search-0d5b94169466/lib/aws_cloud_search/cloud_search.rb:18:in `documents_batch' 
from (irb):9 
from /app/vendor/bundle/ruby/2.0.0/gems/railties-3.2.19/lib/rails/commands/console.rb:47:in `start' 
from /app/vendor/bundle/ruby/2.0.0/gems/railties-3.2.19/lib/rails/commands/console.rb:8:in `start' 
from /app/vendor/bundle/ruby/2.0.0/gems/railties-3.2.19/lib/rails/commands.rb:41:in `<top (required)>' 
from script/rails:6:in `require' 
from script/rails:6:in `<main>'irb(main):010:0> ENV['PROXIMO_URL'] 

=> 나는 이것이 의미하는 걸릴

"http://nn.nnn.nn.nn:80" (i've obscured my ip address) 그 실제 키 '잘못된'이며, 검색 및 문서 (나는 SSL을 사용하지 않고있다.)에서 이것을 얻는다. (나는 프록시없이 403 금지 된 HTML을 얻는다). 응답 본문을 인쇄하려고 시도했지만 오류가 발생하기 전에 (403과 같이) 인쇄 할 수 있다고 생각합니다.

내가 시도하지 않았거나 접근 방식에 문제가 있다는 것은 명백합니까?

감사

+0

내가 패러데이에 대해 아무것도 몰라,하지만 그것을 " 유효하지 않은 "토큰은 실제 프록시 URI입니까? 패러데이가 파싱을 시도하고 실패하는 것 같습니다. 또한 프록시를 두 번 설정하려고 시도하는 것처럼 보이는데, 한 번은'options'에 한 번, 다른 한 번은 명시 적 호출로 설정하는 것입니다. 나는 양쪽 모두를 제거하고 env 변수'http_proxy'를 설정한다고 말합니다. 패러데이가 그것을 사용합니다. –

답변

0

aws-sdk-core 보석은 이제 CloudSearch 도메인 API를 지원 (검색, UploadDocuments, 제안). 클라이언트 API 참조가 여기에서 찾을 수 있습니다

require 'aws-sdk-core' 

client = Aws::CloudSearchDomain::Client.new(
    endpoint:'http://...', 
    http_proxy: 'http://...') 

: 당신은 보석을 설치하고 프록시 클라이언트를 구성 할 수 있어야한다 이 http://docs.aws.amazon.com/sdkforruby/api/Aws/CloudSearchDomain/Client.html

+0

입력 해 주셔서 감사합니다. 실제로 RestClient 사를 사용하여 끝내 었습니다. 사치스럽고 간단하고 dev 릴리스가 아니 었습니다. 필자의 초기 문제는 내가 Proximo에서 제대로 문서를 읽지 못했고 실제로 사용자 이름과 암호가있는 복잡한 주소 대신 http : // <제공된 IP>로 설정하여 PROXIMO_URL을 직접 설정했습니다. 문제가 해결 되더라도 Faraday는 그냥 가지고 있지 않으므로 aws_cloudsearch_gem을 패치하는 대신 RestClient를 배치 업로드에 사용했습니다. @ Nitzan Shaked, http_proxy var를 지적 해 주셔서 감사합니다. 불행히도, 나는 그 중 하나를 작동시키지 못했습니다. –

관련 문제