2013-03-22 3 views
1

REST API에 액세스하는 데몬에 문제가 있습니다.사용자 이름에 RestClient 기본 인증이

액세스에는 기본 인증이 필요합니다. 사용자 이름과 암호는 고정되어 있으며 변경할 수 없습니다.

bad URI(absolute but no path): https://#ws+R4nd0mS7r1n:[email protected]/failover/11.11.11.11 
:

resource = RestClient::Resource.new("#{base_url}/failover/#{failover_ip}", { :user => user_name, :password => user_password}) 
response = resource.get 

이 나에게 나쁜 URI 오류를 가져옵니다 #ws+R4nd0mS7r1n

나는이 같은 API에 액세스 :

문제는 사용자 이름이 같다고 될 것으로 보인다

내가 의도적으로 사용자 이름에서 #을 제거하면 작동하지만 인증되지 않은 오류가 발생합니다.

restclient에 #이 (가) 포함 된 사용자 이름 또는 비밀번호를 전달하는 방법이 있습니까? 완전한 URI를 수동으로 .get에 전달하는 것은 작동하지 않습니다.

+1

다른 클라이언트를 사용해 봤습니까? [faraday] (https://github.com/lostisland/faraday) 또는 [HTTParty] (https://github.com/jnunemaker/httparty/blob/master/examples/delicious.rb)와 같은가요? –

+0

'#'을 '% 23'으로 바꾸어 보았습니까? –

+0

사용자 이름/암호 조합은 결국 HTTP 요청의 Authorization 헤더 부분으로 나아갑니다. 따라서 대체 클라이언트를 시도하는 Oto의 제안은 건전합니다. 또한, 직접 머리글을 설정하려고 할 수도 있습니다 –

답변

3

동일한 오류가 발생하지 않습니다. rest-client의 어떤 버전을 설치하셨습니까?

당신은 단순히 당신의 문제를 해결하기 위해 버전을 업데이트 할 수 있습니다은

또는이 (직접 인증 헤더를 작성하여 URI 실패 주위에 작동합니다 (I는 보석의 버전 1.6.7 테스트)하는 이 데이터가 어쨌든 끝나는 지점입니다.)

require 'base64' 
auth = 'Basic ' + Base64.encode64("#{user_name}:#{user_password}").chomp 
resource = RestClient::Resource.new("#{base_url}/failover/#{failover_ip}", { :headers => { 'Authorization' => auth } }) 
resource.get 
+0

루비 1.8과 1.6.7도 사용하고 있습니다. – Bannane

+0

나는 1.6.7과 루비 1.8.7-p352를 시도했고 에코 서비스에 대한 연결을 얻었는데, 이는 인증 헤더가 다음과 같이 설정되었음을 보여 주었다 :'Authorization : Basic I3dzK1I0bmQwbVM3cjFuOmZvbw =='. . . 그래서 나는 콜 스택에 뭔가 다른 것을 가지고 있다고 의심합니다. 당신을위한 해결 방법을 찾아 내려고 노력할 것입니다. –

+0

제 대답에 해결 방법을 넣으십시오. 오류를 던지고있는 것이 무엇인지 네트워크 스택에서 확인하고 싶을 수 있습니다. 오래된 보석 일 수도 있습니다. –

관련 문제