Techioz Blog

カスタムパラメータを含むhttpリクエストパス

概要

Ruby で Net::HTTP::Get を使用して URL に値を渡そうとしていますが、次のようにする必要があります。

https://translate.google.com/translate?hl=ja&sl=en&tl=ja&u=https://cdpj.partners.bancointer.com.br/pix/v2/webhook/{18497418000111}

しかし、私はそれを行う方法がわかりません、これは私のコードです:

require 'net/http'
require 'net/https'
require 'json'  

uri = URI.parse("https://cdpj.partners.bancointer.com.br/pix/v2/webhook/{18497418000111}")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Get.new(uri.request_uri)
request["Authorization"] = "Bearer #{'1fd64146-xxxx-xxxx-xxxx-xxxx997c170'}"
request["Accept"] = "application/vnd.bluebadge-api.v1+json"
response = http.request(request)

do do itしようとすると、次のメッセージが表示されます。 不正な URI (URI ではありませんか?): “https://cdpj.partners.bancointer.com.br/pix/v2/webhook/{18497418000111}”

しかし、URL 内にパラメータを挿入しようとすると、すべてが期待どおりに機能します。

基本的に私の問題は、URL のこの部分を URI に追加する方法です: {18497418000111} **json ではキー/値を追加する必要がありますが、私の例では値のみを渡す必要があります。

ありがとう!

解決策

{ および } 文字を 16 進コードでエンコードすると、機能します。以下の irb からの出力を参照してください。

エンコード前

3.1.2 :013 > uri = URI.parse('https://cdpj.partners.bancointer.com.br/pix/v2/webhook/{18497418000111}')
.../.rvm/rubies/ruby-3.1.2/lib/ruby/3.1.0/uri/rfc3986_parser.rb:67:in `split': bad URI(is not URI?): "https://cdpj.partners.bancointer.com.br/pix/v2/webhook/{18497418000111}" (URI::InvalidURIError)

エンコード後

3.1.2 :015 > uri = URI.parse("https://cdpj.partners.bancointer.com.br/pix/v2/webhook/%7B18497418000111%7D")
 => #<URI::HTTPS https://cdpj.partners.bancointer.com.br/pix/v2/webhook/%7B18497418000111%7D> 
3.1.2 :016 > http = Net::HTTP.new(uri.host, uri.port)
3.1.2 :017 > http.use_ssl = true
 => true 
3.1.2 :018 > request = Net::HTTP::Get.new(uri.request_uri)
 => #<Net::HTTP::Get GET> 
3.1.2 :019 > request["Authorization"] = "Bearer #{'1fd64146-xxxx-xxxx-xxxx-xxxx997c170'}"
3.1.2 :020 > request["Accept"] = "application/vnd.bluebadge-api.v1+json"
 => "application/vnd.bluebadge-api.v1+json" 
3.1.2 :021 > response = http.request(request)
 => #<Net::HTTPBadRequest 400 Bad Request readbody=true> 
3.1.2 :022 >