最終效果:
第一步:使用 httpwatch 對教務網抓包 使用volley框架和httpurlconnection 獲取課程表資訊
獲取cookie
之前自己在寫模擬登入學校教務網資訊的時候,找了一下部落格上的前輩們的文章。 很多文章上寫的cookie是在post登入訊息的時候伺服器返回的,可是根據我自己的抓包情況我發現我的cookie是在進入教務網登入頁面的時候 伺服器就返回了的(所以大家還是要以自己的抓包情況來分析)。 在圖中我用紅色框框標出了 set-cookie ,它的值就是我們後面傳送請求需要的cookie了(獲取cookie這個很重要)。
使用 httpurlconnection 將學生的登入資訊(學號,密碼,驗證碼)post 給教務網系統
抓包截圖:
個人認為post是整個功能中實現最困難的一步
寫post的時候要特別注意的幾個問題:
注意1:重定向問題 要post的時候要設定重定向為false
之前一直習慣用volley框架,可是volley設定重定向的時候沒有直接的方法,最後果斷選擇httpurlconnection
postcon.setinstancefollowredirects(false);
注意2:當寫post引數的時候注意編碼問題,因為正方教務網的編碼用的是gb2312的,那麼我們在post的時候要將所有引數轉換為gbk(gb2312),
__viewstate和_viewstategenerator引數的內容,你可以通過解析原始碼後達到。
string postdata = "__viewstate=" + urlencoder.encode(__viewstate, "gbk") + "&__viewstategenerator=" + __viewstategenerator + "&textbox1=" + account.gettext().tostring() + "&textbox2=" + password.gettext().tostring() + "&textbox3=" + checkcode + "&radiobuttonlist1=" + urlencoder.encode("學生", "gbk") + "&button1="
;
注意3: post請求頭:要將上面獲取的那個cookie寫入(這樣才能讓伺服器知道是同乙個使用者在訪問伺服器 還有 referer 這個也很重要 不能忘)
postcon.setrequestproperty("cookie", cookiestring);
postcon.setrequestproperty("referer", mainurl);
到這裡 post請求就已經寫好了 如果在伺服器返回的頭資訊中能夠拿到location的話 就說明你已經登入成功了 ,如果未拿到正確的location資訊,請檢查一下 我上面說的幾點注意 你是否做好。
登入成功之後, 獲取課程表資訊
根據你的抓包結果 向正確的url傳送get請求 (還是要帶上之前獲取的cookie) 就可以獲取正確的課程表網頁的原始碼了,因為根據我抓包的情況來看我不需要設定重定向,那肯定就使用volley框架了。
// 獲取課表的網頁資訊
private
void
getcourse(string name, string number)
}, new response.errorlistener()
}) };
} catch (unsupportedencodingexception e)
courserequest.settag("courserequest");
requestqueue.add(courserequest);
傳送請求的時候會有乙個姓名的引數要放在url中 這個引數也是可以通過解析之前post請求成功後返回的網頁原始碼得到的。 模擬登入教務處 header
import htmlparser import urlparse import urllib import urllib2 import cookielib import string import re 登入的主頁面 hosturl 自己填寫 post資料接收和處理的頁面 我們要向這個頁面傳送我...
訊號與系統課程向學校教務科需要提交的資料
根據教育效能公式清華大學第三批標桿課程評比結果評比結果,訊號與系統分析課程被列為第三批清華大學標桿課程。根據學校教務科 chenyujie 的要求,需要將以下材料傳送到 chenyujie tsinghua.edu.cn。1 課程簡介 200字左右 2 教師介紹 100字左右 3 教師 課堂 各一張...
PHP獲取Cookie模擬登入
一 定義cookie儲存路徑 必須使用絕對路徑 cookie jar dirname file pic.cookie 二 獲取cookie 將cookie存入檔案 url ch curl init curl setopt ch,curlopt url,url curl setopt ch,curlo...