값을 문자열로 보간하는 법을 배워야합니다.
node = {
chef: {
node_name: 'foo'
}
}
그리고이 문자열 정의 :이 해시 정의로 시작
'https://'"#{node[:chef][:node_name]}"'/v1/xyz'
# => "https://foo/v1/xyz"
루비는 하나 개의 문자열에 인접한 문자열을 연결합니다
'foo'"bar"'baz' # => "foobarbaz"
하지만 코드가 너무 돈을 읽을 못생긴 네가 아주 좋은 이유가 없다면 그렇게하지 마라. 대신 간단하게 쓰기 :
'foobarbaz' # => "foobarbaz"
또는 :
는
"foobarbaz" # => "foobarbaz"
더 혼란 코드가 기억, 열심히 당신을 위해있을거야, 또는 다른 사람, 파악하는 것은 그것이 무엇을 의미하는지 6 개월.
그래서, 대신 위의 문자열, 사용의 :
'#{node[\'user\']}:#{node[\'password\']'
# => "\#{node['user']}:\#{node['password']"
:이 문제의 핵심은
require 'base64'
"BasiC#{Base64.encode64('#{node[\'user\']}:#{node[\'password\']')}"
# > "Basic I3tub2RlWyd1c2VyJ119OiN7bm9kZVsncGFzc3dvcmQnXQ==\n"
입니다 :
"https://#{node[:chef][:node_name]}/v1/xyz"
# => "https://foo/v1/xyz"
당신은 당신의 코드에 또 다른 문제가
코드가 실행되면 Base64.encode64
에 전달 된 값이 해당 문자열입니다. 변수가 보간되지 않으므로 항상 결과 문자열에
# > "Basic I3tub2RlWyd1c2VyJ119OiN7bm9kZVsncGFzc3dvcmQnXQ==\n"
을 얻습니다. 사용자 또는 암호가 인코딩되어 있지 않습니다.
두 번째 문제는 사용자의 node
해시에 'user'
또는 'password'
키가 없을 수 있지만 충분한 정보를 제공하지 않아서 알 수 없습니다.다음
encoded_user_password = Base64.encode64(
node.values_at('user', 'password').join(':')
)
문자열로 보간 :
encode64
를 호출하기위한 명확하고 깨끗한 방법이 될 것입니다 그것의로
"BasiC#{encoded_user_password}"
나는 또한 루비의 URI 클래스에 익숙해지고 권하고 싶습니다 URI를 만들고 조작하는 기본 방법.
"[ask]"와 "[mcve]"및 Jon Skeet의 "[완벽한 질문 작성] (https://codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question/)을 참조하십시오.) "및"[스택 오버플로 사용자에 대한 연구 노력이 얼마나 될까요?] (http://meta.stackoverflow.com/questions/261592) ". 질문에 더 많은 노력을 기울이십시오. –
희망적입니다 지금 –
openssl에 문제가있는 것 같습니다. 적어도 1.0.2 버전을 사용하고 있는지 확인하고 'openssl s_client -connect yourdomain : 443'명령이 작동하는지 확인하십시오. 연결하려는 주소가 www.example.com 인 경우 yourdomain을 example.com (www가없는 경우)으로 대체하십시오. –