3

私は Python の初心者で、この小さなスクリプトをコーディングして、ローカル サーバー (localhost) で HTTP GET 要求を送信しました。アクセントなどのラテン文字を送信できることを除けば、うまく機能します。

import http.client

httpMethod = "GET"
url = "localhost"
params = "Hello World"

def httpRequest(httpMethod, url, params):
    conn = http.client.HTTPConnection(url)
    conn.request(httpMethod, '/?param='+params)
    conn.getresponse().read()
    conn.close()
    return

httpRequest(httpMethod, url, params)

パラメータ「params」にアクセント付きの単語を挿入すると、次のエラー メッセージが表示されます。

UnicodeEncodeError: 'ascii' コーデックは位置 14 の文字 '\xe9' をエンコードできません: 序数が範囲内にありません(128)

http.client ライブラリを使用した解決策があるかどうかはわかりませんが、そうだと思います。ドキュメント http.client を見ると、次のように表示されます。

HTTPConnection.request

文字列は、HTTP のデフォルトの文字セットである ISO-8859-1 としてエンコードされます。

4

1 に答える 1

5

引数を手動で作成しないでください。urlencode代わりに使用してください:

>>> from urllib.parse import urlencode
>>> params = 'Aserejé'
>>> urlencode({'params': params})
'params=Aserej%C3%A9'

したがって、次のことができます。

conn.request(httpMethod, '/?' + urlencode({'params': params}))

Yout 文字列は、URL エスケープされる前に UTF-8 としてエンコードされることにも注意してください

于 2013-06-07T14:02:35.577 に答える