学校でクラスの開始を監視するための小さなツールを作成しています。
数分ごとに各部門から現在のクラスの空き状況を取得する Python スクリプトを作成しました。
大学のサイトがこれを返し始めるまで、スクリプトは適切に機能していました。
SIS Server is not available at this time
Uni が私のサーバーをブロックしたに違いありません。それは、他の PC から直接 URL にアクセスしたときに得られる出力だからです。しかし、ユニのサイトで POST を実行する中間フォームを通過すると、そのメッセージが表示されません。
私がリクエストしている URL はhttps://s4.its.unc.edu/SISMisc/SISTalkerServletです
これは私のpythonコードがどのように見えるかです:
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)
私は本当に困惑しています!Python が適切なリクエストを送信していないようです。最初は適切な投稿データを送信していないと思っていましたが、URL をローカル ボックスに変更したところ、Apache が受け取った投稿データは問題ないようでした。
システムが実際に機能しているのを見たい場合は、https://s4.its.unc.edu/SISMisc/browser/student_pass_z.jspに移動し、[ゲストとして入力] ボタンをクリックしてから、[コースの利用可能性] を探します。 . (これで、私がこれを作成する理由がわかりました!)
最も奇妙なことは、これが午前 11 時まで機能していたことです。以前にも同じエラーが発生しましたが、数分間しか続きませんでした。これは、ユニによるサーバーのブロックよりも、どこかで問題があることを示しています。
更新 提案に応じて、より正当なリファラー/ユーザーエージェントで遊んでみました。同じ結果です。これは私が試したものです:
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()