Я работаю над проектом django
на основе Python 3
. Я пытаюсь включить captcha
. Я выбрал django-recaptcha, но, к сожалению, пакет не доступен для python3. Поэтому попробовал настроить порт на python3. Я сделал некоторые вещи 2to3
и сделал некоторые изменения по мере необходимости. Кажется, все работает отлично, за исключением url encoding for Request
.Python-3 Ошибка кодирования параметра запроса
Следующий снипп доход POST data should be bytes or an iterable of bytes. It cannot be of type str.
исключение.
def encode_if_necessary(s):
if isinstance(s, str):
return s.encode('utf-8')
return s
params = urllib.parse.urlencode({
'privatekey': encode_if_necessary(private_key),
'remoteip': encode_if_necessary(remoteip),
'challenge': encode_if_necessary(recaptcha_challenge_field),
'response': encode_if_necessary(recaptcha_response_field),
})
if use_ssl:
verify_url = "https://%s/recaptcha/api/verify" % VERIFY_SERVER
else:
verify_url = "http://%s/recaptcha/api/verify" % VERIFY_SERVER
request = urllib.request.Request(
url= verify_url,
data=params,
headers={
"Content-type": "application/x-www-form-urlencoded",
"User-agent": "reCAPTCHA Python"
}
)
httpresp = urllib.request.urlopen(request)
Так что я пытался кодировать URL и другие вещи в request
-
request = urllib.request.Request(
url= encode_if_necessary(verify_url),
data=params,
headers={
"Content-type": encode_if_necessary("application/x-www-form-urlencoded"),
"User-agent": encode_if_necessary("reCAPTCHA Python")
}
)
Но это дает urlopen error unknown url type: b'http
исключение.
Кто-нибудь знает, как это исправить? Любая помощь приветствуется :).
Я тоже закодировал данные в 2 этапа. Код, который вы упомянули, отлично работает. Спасибо за ответ. –
Ах, черт возьми, я только что видел, что ты ответил себе ~ за 30 секунд до того, как я это сделал! Ну, похлопайте себя по спине и поднимитесь! :) – Nil
Можете ли вы рассказать мне, почему вы выбрали utf-8? Как получающий сервер знает, что вы отправили utf-8, а не, скажем, латинский-1? –