가 나는 URL로 요청을 보내이 코드를 가지고 있고, 나는 URL을 두 변수에 배치하고 싶었 :URL에 변수를 삽입하는 방법은 무엇입니까?
talksList = open('http://yolo.com/?action=cp_list&id=#{variable1}&key=#{variable2}')
을하지만이처럼 내 변수를 삽입 할 때, 그것은 작동하지 않습니다. 너 나 좀 도와 줄 수있어?
미리 감사드립니다.
가 나는 URL로 요청을 보내이 코드를 가지고 있고, 나는 URL을 두 변수에 배치하고 싶었 :URL에 변수를 삽입하는 방법은 무엇입니까?
talksList = open('http://yolo.com/?action=cp_list&id=#{variable1}&key=#{variable2}')
을하지만이처럼 내 변수를 삽입 할 때, 그것은 작동하지 않습니다. 너 나 좀 도와 줄 수있어?
미리 감사드립니다.
작은 따옴표로 묶어서 사용하기 때문입니다. 작은 따옴표로 묶인 문자열에서는 \\
및 \'
을 제외하고는 아무 것도 대체되지 않습니다.
특히, 보간 @YuHao 말했듯이, 당신은 비 해석 문자열로 변수를 보간하기 위해 노력하고
talksList = open("http://yolo.com/?action=cp_list&id=#{variable1}&key=#{variable2}")
시도를 두 번 인용 문자열에서만 사용할 수 있습니다. 하지만 장기적인 문제는 더 커집니다.
인코딩되지 않은 변수를 URL에 삽입하지 마십시오. 작동하는 동안, 당신은 브라우저가 받아들이는 무의미한 URL을 생성 할 위험이 있지만 코드는 그렇지 않습니다. 대신 적절한 도구를 사용하여 URL을 수정하면 적절한 인코딩이 유지됩니다.
여기 URI를 사용하는 예제입니다 :
require 'uri'
variable1 = 'foo'
variable2 = 'bar'
uri = URI.parse('http://yolo.com/?action=cp_list')
params = URI.decode_www_form(uri.query)
params << ['id', variable1]
params << ['key', variable2]
uri.query = URI.encode_www_form(params)
uri.to_s # => "http://yolo.com/?action=cp_list&id=foo&key=bar"
당신은 인 Addressable 보석을 사용하여 같은 일을 할 수있는보다 완벽한 기능을 갖춘 :
require 'addressable/uri'
variable1 = 'foo'
variable2 = 'bar'
uri = Addressable::URI.parse('http://yolo.com/?action=cp_list')
params = uri.query_values
uri.query_values = params.merge('id' => variable1, 'key' => variable2)
uri.to_s # => "http://yolo.com/?action=cp_list&id=foo&key=bar"
그것은 진행하지만, 또 다른이 문제 : 두 변수를 올바르게 설정했지만 irb는 변수가 정의되지 않았다고 말합니다. 그러나 인쇄 할 때 값이 정확합니다. – Vinm
@Vinm 다른 문제입니다. 그런 다음 다른 질문을하십시오 (일부 조사 후). –