Python 3, urllib POST отправить
Я хотел бы написать скрипт Python для автоматического входа в мою учетную запись широкополосного счетчика использования. Я никогда не делал POST submit раньше, и у меня возникли проблемы с этим.
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
- идентификатор пароля.
вот моя проблема:
когда я ввожу правильное имя пользователя и пароль, загружается страница входа, но:
-
Когда Я введите неверное имя пользователя или пароль, я получаю страницу с надписью:
этот сервер обнаружил внутреннюю ошибку, которая мешает ему выполнить вашу просьбу. Наиболее вероятной причиной является неправильная конфигурация. Попросите администратора найти сообщения в журнале ошибок сервера.
2 ответов
details = urllib.parse.urlencode({'IDToken1': 'USERNAME', 'IDToken2': 'PASSWORD'})
добавить следующую строку:
details = details.encode('UTF-8')
Это может быть по дизайну. Что произойдет, если вы сделаете это в браузере? Тот факт, что он работает с правильными данными означает, что вы все делаете правильно.