URL에 값을 삽입하는 대신 올바른 문자를 입력하고 Ruby가 특수 문자의 가능한 인코딩을 처리하도록하십시오 :
실행 한 후
require 'uri'
name = 'foo'
number = 1
uri = URI('https://api.twitter.com/1/statuses/user_timeline.json?include_entities=true&include_rts=true')
uri.query = URI.encode_www_form(
Hash[
URI.decode_www_form(uri.query)
].merge('name' => name, 'count' => number)
)
puts uri
, 이것은 출력입니다 : 당신이 일 것 보간을 사용하여 URL에 값을 넣을 수 있습니다
https://api.twitter.com/1/statuses/user_timeline.json?include_entities=true&include_rts=true&name=foo&count=1
시간의 90 % 동안, 당신은 포함해야 시간이있다 인코딩해야하는 문자 및 URL을 사용하려고하면 오류가 발생합니다.
URI 클래스는 쿼리를 인코딩하는 방법에 대한 스펙을 따르므로 이러한 문제는 발생하지 않습니다.
것은 아래로 속보, 당신은 어떻게 볼 수 있습니다 :
uri.query
# => "include_entities=true&include_rts=true"
URI.decode_www_form(uri.query)
# => [["include_entities", "true"], ["include_rts", "true"]]
Hash[URI.decode_www_form(uri.query)]
# => {"include_entities"=>"true", "include_rts"=>"true"}
Hash[URI.decode_www_form(uri.query)].merge('name' => name, 'count' => number)
# => {"include_entities"=>"true", "include_rts"=>"true", "name"=>"foo", "count"=>1}
URI.encode_www_form(Hash[URI.decode_www_form(uri.query)].merge('name' => name, 'count' => number))
# => "include_entities=true&include_rts=true&name=foo&count=1"
편집 :
URI에 대한`decode_www_form '정의되지 않은 방법 모듈 (NoMethodError)
메신저 사용 루비 1.9
Addressable 보석을보세요. 그것은 아주 멋지게 한 후 더 많은 기능을 수행하고,이있어 내장 된 URI 클래스 :
require 'addressable/uri'
name = 'foo'
number = 1
uri = Addressable::URI.parse('https://api.twitter.com/1/statuses/user_timeline.json?include_entities=true&include_rts=true')
uri.query_values = uri.query_values.merge('name' => name, 'count' => number)
puts uri
과 같습니다이 인수와 함께 작동합니다
이
https://api.twitter.com/1/statuses/user_timeline.json?count=1&include_entities=true&include_rts=true&name=foo
그래서 내가 그것을 가지고 ... – user2466087
정의되지 않은 메서드' decode_www_form 'for URI : Module (NoMethodError) – user2466087
'decode_www_form'은 URI를위한 클래스 메소드이며 [Ruby 1.9.2부터] (http://www.ruby-doc.org/stdlib-1.9.2/libdoc)되었습니다. /uri/rdoc/index.html). 1.9.2 이전 버전의 Ruby를 사용하고 있습니까? 그렇지 않은 경우 코드 예제를 올바르게 구현하지 않았습니다. –