0

私はpythonパッケージリクエストを使用して、サーバーにリクエストを取得しています。私の目標は、特定の既知の http 要求を複製し、それらを Python スクリプトに組み込むことです。元のクエリ文字列には、1 つのキーと値のペア「version=0%2E12」が含まれています。これは、「version=0.12」に相当する URL エンコードであることがわかっています。以下は、http 要求を複製するために私が行っていることの例です。

params = {
          'version'='0.12',
          'language'='en',
          ...
          }
 resp = requests.get(url, params)

結果の URL クエリ文字列には、「version=0.12」が含まれています。paramsの設定を次のように変更しようとすると、

    params = {
          'version'='0%2E12',
          'language'='en',
          ...
          }

しかし、結果のクエリ文字列には「version=0%252E31」が含まれています。基本的に、リクエストは % を解析して URL エンコードします。

URL全体を手動で記述せずに、params引数をピリオドで適切に解析するリクエストを取得するにはどうすればよいですか?

4

1 に答える 1

2

.は、URL エンコードされた値で完全に有効な文字であることに注意してください。

標準のエンコーディングをバイパスして、値を自分でエンコードする必要があります。を使用してから、文字を手urllib.urlencode()で置き換えます。.%2E

次に、エンコードされた文字列をクエリ パラメータとして URL に追加しrequests、値を再エンコードしないように構成する必要があります。

params = {
      'version'='0.12',
      'language'='en',
      ...
      }
params = urllib.urlencode(params)
params = params.replace('.', '%2E')
resp = requests.get('?'.join(url, params), config={'encode_uri': False})

に設定されたencode_uriパラメーターFalseは、ここでトリックを行います。それ以外の場合は、RFC 準拠を確保するために URL 全体を再エンコードするのはこのrequestsデフォルトです。

于 2012-11-30T21:16:14.790 に答える