Ich schreibe ein kleines Werkzeug, um Klassenöffnungen an meiner Schule zu überwachen.Python/urllib hört plötzlich auf, richtig zu funktionieren
Ich schrieb ein Python-Skript, das die aktuelle Verfügbarkeit von Klassen aus jeder Abteilung alle paar Minuten holt.
Das Skript wurde ordnungsgemäß funktionieren, bis die Website der Uni begann Rückkehr dies:
SIS Server is not available at this time
Uni meine Server direkt blockiert haben muss? Nun, nicht wirklich, denn das ist die Ausgabe, die ich bekomme, wenn ich die URL direkt von anderen PCs bekomme. Aber wenn ich das Zwischenformular auf der Seite von uni durchführe, die einen POST macht, bekomme ich diese Nachricht nicht.
Die URL Ich bin anfordernden ist https://s4.its.unc.edu/SISMisc/SISTalkerServlet
Das, was Code meine Python ist wie folgt aussieht:
data = urllib.urlencode({"progname" : "SIR033WA", "SUBJ" : "busi", "CRS" : "", "TERM" : "20099"})
f = urllib.urlopen("https://s4.its.unc.edu/SISMisc/SISTalkerServlet", data)
s = f.read()
print (s)
ich wirklich bin ratlos! Es scheint, als würde Python keine korrekte Anfrage senden. Zuerst dachte ich, es würde keine richtigen Post-Daten senden, aber ich änderte die URL zu meiner lokalen Box und die Post-Daten Apache erhalten schien gut.
Wenn Sie möchten, dass das System tatsächlich funktioniert, gehen Sie zu https://s4.its.unc.edu/SISMisc/browser/student_pass_z.jsp und klicken Sie auf die Schaltfläche "Als Gast eingeben" und suchen Sie nach "Kursverfügbarkeit". (Jetzt wissen Sie, warum ich das hier baue!)
Das Seltsamste ist, dass es bis 11 Uhr funktionierte! Ich hatte den gleichen Fehler zuvor, aber es dauerte nur wenige Minuten. Das sagt mir, dass es eher ein Problem ist als irgendein Blockieren meines Servers durch die Uni.
Update Auf Vorschlag habe ich versucht, mit einem legit referer/User-Agent zu spielen. Gleiches Ergebnis. Das ist, was ich versuchte:
import httplib
import urllib
headers = {'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US;rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4',"Content-type": "application/x-www-form-urlencoded","Accept": "text/plain","Referrer": "https://s4.its.unc.edu/SISMisc/SISTalkerServlet"}
data = urllib.urlencode({"progname" : "SIR033WA", "SUBJ" : "busi", "CRS" : "", "TERM" : "20099"})
c = httplib.HTTPSConnection("s4.its.unc.edu",443)
c.request("POST", "/SISMisc/SISTalkerServlet",data,headers)
r = c.getresponse()
print r.read()
Ich kann Ihnen nicht helfen, aber jetzt weiß jeder, in welche Klasse Sie zielen und wird es eilig haben, um es vor Ihnen zu bekommen! –