2011-04-30 10 views
6

Chciałbym napisać skrypt Python do automatycznego logowania do mojego konta licznika zużycia łącza szerokopasmowego. Nigdy wcześniej nie robiłem zgłoszenia POST i mam z tym problem.Python 3, urllib POST przesyła

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) 

Z HTML I pochodzącej że IDToken1 jest identyfikator użytkownika i IDToken2 jest id hasło.

Oto mój problem:

  • Kiedy wprowadzić prawidłową nazwę użytkownika i hasło, obciążenia strony logowania, ale:

  • Kiedy wprowadzić niewłaściwy login i hasło, otrzymuję strona z napisem:

    Ten serwer napotkał błąd wewnętrzny, który uniemożliwia spełnienie żądania. Najbardziej prawdopodobną przyczyną jest błędna konfiguracja. Poproś administratora, aby szukał komunikatów w dzienniku błędów serwera.

+0

dobrze, to jest bardzo trudne, nie widząc rzeczywistą stronę używasz ... może powinieneś sprawdzić, co jest faktycznie wysłane przez przeglądarkę z Chrome dev narzędzia czy sniffer pakietów jak Wireshark? – Strayer

Odpowiedz

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

Dodaj następujący wiersz:

details = details.encode('UTF-8') 
0

To może być zgodne z projektem. Co się stanie, jeśli zrobisz to w przeglądarce? Fakt, że działa z poprawnymi danymi, oznacza, że ​​robisz to dobrze.