カスタムパラメータを含む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 >