1

配列として渡されたフィールドの 1 つを使用して URL にリクエストを発行する必要がある API を使用しています。例えば:

"http://www.example.com/objects/add.php?key=XXXXXXXXXXX;objects=[%7B%2522field1%2522%253A%2522My%2520ObjectA2%2522%7D%252C%7B%2522field%2522%253A%2522ObjectB%2522%252C%2522color%2522%253A%25221%2522%252C%2522note%2522%253A%252298765%2522%7D];ids=foo,bar" 

ご覧のとおり、配列の内容は URL エンコードする必要がありますが、URL 全体はエンコードされていません。はい、それが奇妙であることはわかっていますが、それは API の設定方法です。Chrome に URI を入力して Enter キーを押すと動作しますが、Typhoeus (または net/http) を使用して URI をエンコードしてから渡すと失敗します (要求は通過しますが、API はそれを適切に認識しません)。 .

角かっこを URL エンコードせずに、Ruby にこの URI に HTTP リクエストを発行させるにはどうすればよいですか?

編集: この SO 応答は有望に見えましたが、この例に合わせてモンキーパッチを変更する方法が完全にはわかりません。

ruby の URI.parse メソッドにモンキー パッチを適用するにはどうすればよいですか

4

1 に答える 1

1

Typhoeus では、Ruby コンストラクトを使用して HTTP パラメーターを渡すことができます。投稿の URL に似た URL を生成するには、次のようにします。

my_params = { 
              api_key: "XXXXXXXXXXXXXXXXXX",
              objects: [
                { field1: 'My ObjectA2' },
                { field:  'ObjectB',
                  color:  '1',
                  note:   '98765' }],
              ids:  "foo, bar" 
            }


get_response = Typhoeus::Request.get("http://www.example.com/objects/add.php",  params: my_params)
get_response.effective_url #> http://www.example.com/objects/add.php?api_key=XXXXXXXXXXXXXXXXXX&ids=foo%2C+bar&objects=%7B%3Afield1%3D%3E%22My+ObjectA2%22%7D&objects=%7B%3Afield%3D%3E%22ObjectB%22%2C+%3Acolor%3D%3E%221%22%2C+%3Anote%3D%3E%2298765%22%7D

ただし、URL の例には JSON オブジェクトが含まれているため、使用している API が POST 要求を探している可能性が高くなります。

post_response = Typhoeus::Request.post("http://www.example.com/objects/add.php", params: my_params)
post_response.effective_url #> http://www.example.com/objects/add.php
post_response.request.params #> {:api_key=>"XXXXXXXXXXXXXXXXXX", :objects=>[{:field1=>"My ObjectA2"}, {:field=>"ObjectB", :color=>"1", :note=>"98765"}], :ids=>"foo, bar"}

編集:

API が GET 要求を予期している場合、現在、GET 要求を介してシリアル化されたデータを渡す最も一般的な方法は、パラメーター名の末尾に角かっこを追加することです。

http://www.example.com/objects/add.php?objects[]=something&objects[]=something%20else

ただし、Typhoeus はデフォルトで括弧を追加しません。この決定の背後にある理由を提供するTyphoeus メーリング リストでいくつかの議論があります。幸いなことに、括弧は自分で簡単に追加できます。

my_params = { 
              api_key: "XXXXXXXXXXXXXXXXXX",
              :"objects[]" => [
                { field1: 'My ObjectA2' },
                { field:  'ObjectB',
                  color:  '1',
                  note:   '98765' }],
              ids:  "foo, bar" 
            }


get_response = Typhoeus::Request.get("http://www.example.com/objects/add.php",  params: my_params)
get_response.effective_url #> http://www.example.com/objects/add.php?api_key=XXXXXXXXXXXXXXXXXX&ids=foo%2C+bar&objects%5B%5D=%7B%3Afield1%3D%3E%22My+ObjectA2%22%7D&objects%5B%5D=%7B%3Afield%3D%3E%22ObjectB%22%2C+%3Acolor%3D%3E%221%22%2C+%3Anote%3D%3E%2298765%22%7D
于 2012-01-11T00:32:40.137 に答える