Python 3, urllib POST отправить

Я хотел бы написать скрипт Python для автоматического входа в мою учетную запись счетчика использования широкополосного доступа. Я никогда раньше не отправлял POST, и у меня с этим проблемы.

import urllib.request, urllib.parse, urllib.error
import socket

try:
    details = urllib.parse.urlencode({ 'IDToken1': 'USERNAME', 'IDToken2': 'PASSWORD' })
    url = urllib.request.Request('https://login1.telecom.co.nz/distauth/UI/Login?realm=XtraUsers&goto=https%3A%2F%2Fwww.telecom.co.nz%3A443%2Fjetstreamum%2FxtraSum%3Flink%3Drdt', details)
    url.add_header("User-Agent","Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.29 Safari/525.13")

    responseData = urllib.request.urlopen(url).read().decode('utf8', 'ignore')
    responseFail = False

except urllib.error.HTTPError as e:
    responseData = e.read().decode('utf8', 'ignore')
    responseFail = False

except urllib.error.URLError:
    responseFail = True

except socket.error:
    responseFail = True

except socket.timeout:
    responseFail = True

except UnicodeEncodeError:
    print("[x]  Encoding Error")
    responseFail = True

print(responseData)

Из HTML я понял, что IDToken1 — это идентификатор имени пользователя, а IDToken2 — это идентификатор пароля.

Вот моя проблема:

  • Когда я ввожу правильное имя пользователя и пароль, страница входа загружается, но:

  • #P5# <блочная цитата> #P6#

person Rhys    schedule 30.04.2011    source источник
comment
Что ж, это очень сложно, не видя фактическую страницу, которую вы используете ... может быть, вам следует проверить, что на самом деле отправляет ваш браузер, с помощью инструментов разработчика Chrome или анализатора пакетов, такого как Wireshark?   -  person Strayer    schedule 18.10.2012


Ответы (2)


details = urllib.parse.urlencode({'IDToken1': 'USERNAME', 'IDToken2': 'PASSWORD'})

Добавьте следующую строку:

details = details.encode('UTF-8')
person Chris    schedule 08.04.2013

Это может быть по замыслу. Что произойдет, если вы сделаете это в браузере? Тот факт, что он работает с правильными данными, означает, что вы все делаете правильно.

person Cees Timmerman    schedule 06.02.2013