1.接口測試
⑴
cookie:Cookie就是由服務器發給客戶端的特殊信息,而這些信息以文本文件的方式存放在客戶端,然后客戶端每次向服務器發送請求的時候都會帶上這些特殊的信息。保存時間為3小時。
session:Session對應的類為javax.servlet.http.HttpSession類。每個來訪者對應一個Session對象,所有該客戶的狀態信息都保存在這個Session對象里。Session對象是在客戶端第一次請求服務器的時候創建的。Session也是一種key-value的屬性對,通過getAttribute(Stringkey)和setAttribute(String key,Objectvalue)方法讀寫客戶狀態信息。Servlet里通過request.getSession()方法獲取該客戶的Session,例如:
<span style="color:#333333"><code><%@ page language=<span style="color:#a31515">"java"</span> pageEncoding=<span style="color:#a31515">"UTF-8"</span>%>
<jsp:directive.page <span style="color:#0000ff">import</span>=<span style="color:#a31515">"com.helloweenvsfei.sessionWeb.bean.Person"</span>/>
<jsp:directive.page <span style="color:#0000ff">import</span>=<span style="color:#a31515">"java.text.SimpleDateFormat"</span>/>
<jsp:directive.page <span style="color:#0000ff">import</span>=<span style="color:#a31515">"java.text.DateFormat"</span>/>
<jsp:directive.page <span style="color:#0000ff">import</span>=<span style="color:#a31515">"java.util.Date"</span>/>
<%!
DateFormat dateFormat = newSimpleDateFormat(<span style="color:#a31515">"yyyy-MM-dd"</span>); <span style="color:green">// 日期格式化器</span>
%>
<%
response.setCharacterEncoding(<span style="color:#a31515">"UTF-8"</span>); <span style="color:green">// 設置request編碼</span>
Person[] persons =
{
<span style="color:green">// 基礎數據,保存三個人的信息</span>
<span style="color:#0000ff">new</span> Person(<span style="color:#a31515">"Liu Jinghua"</span>,<span style="color:#a31515">"password1"</span>, 34, dateFormat.parse
(<span style="color:#a31515">"1982-01-01"</span>)),
<span style="color:#0000ff">new</span> Person(<span style="color:#a31515">"Hello Kitty"</span>,<span style="color:#a31515">"hellokitty"</span>, 23, dateFormat.parse
(<span style="color:#a31515">"1984-02-21"</span>)),
<span style="color:#0000ff">new</span> Person(<span style="color:#a31515">"Garfield"</span>, <span style="color:#a31515">"garfield_pass"</span>,23, dateFormat.parse
(<span style="color:#a31515">"1994-09-12"</span>))
};
String message = <span style="color:#a31515">""</span>; <span style="color:green">// 要顯示的消息</span>
<span style="color:#0000ff">if</span>(request.getMethod().equals(<span style="color:#a31515">"POST"</span>))
{
<span style="color:green">// 如果是POST登錄 </span>
<span style="color:#0000ff">for</span>(Person person :persons)
{
<span style="color:green">// 遍歷基礎數據,驗證賬號、密碼</span>
<span style="color:green">// 如果用戶名正確且密碼正確</span>
<span style="color:#0000ff">if</span>(person.getName().equalsIgnoreCase(request.getParameter(<span style="color:#a31515">"username"</span>))&&person.getPassword().equals(request.getParameter(<span style="color:#a31515">"password"</span>)))
{
<span style="color:green">// 登錄成功,設置將用戶的信息以及登錄時間保存到Session</span>
session.setAttribute(<span style="color:#a31515">"person"</span>, person); <span style="color:green">// 保存登錄的Person</span>
session.setAttribute(<span style="color:#a31515">"loginTime"</span>, <span style="color:#0000ff">new</span> Date()); <span style="color:green">// 保存登錄的時間 </span>
response.sendRedirect(request.getContextPath() + <span style="color:#a31515">"/welcome.jsp"</span>);
<span style="color:#0000ff">return</span>;
}
}
message = <span style="color:#a31515">"用戶名密碼不匹配,登錄失敗。"</span>; <span style="color:green">// 登錄失敗</span>
}
%>
<!DOCTYPE HTML PUBLIC <span style="color:#a31515">"-//W3C//DTD HTML 4.01Transitional//EN"</span>>
<html>
<span style="color:green">// ... HTML代碼為一個FORM表單,代碼略,請看隨書光盤</span>
</html></code></span>
⑵
get請求
用來向服務器獲取數據
post請求
用來向服務器發送數據
url
請求頭
存放一些額外的信息
用的是什么瀏覽器。。
請求體
發送的數據
get請求沒有請求體,它的數據是在url里面放的
get請求不安全,post請求安全一點
get請求傳輸的數據沒有post請求傳輸的數據多
HTTP:
1xx (臨時響應)表示臨時響應並需要請求者繼續執行操作的狀態代碼。
- 100 (繼續) 請求者應當繼續提出請求。 服務器返回此代碼表示已收到請求的第一部分,正在等待其余部分。
- 101 (切換協議) 請求者已要求服務器切換協議,服務器已確認並准備切換。
- 102 由WebDAV(RFC 2518)擴展的狀態碼,代表處理將被繼續執行。
2xx (成功)表示成功處理了請求的狀態代碼。
- 200 (成功) 服務器已成功處理了請求。 通常,這表示服務器提供了請求的網頁。
- 201 (已創建) 請求成功並且服務器創建了新的資源。
- 202 (已接受) 服務器已接受請求,但尚未處理。
- 203 (非授權信息) 服務器已成功處理了請求,但返回的信息可能來自另一來源。
- 204 (無內容) 服務器成功處理了請求,但沒有返回任何內容。
- 205 (重置內容) 服務器成功處理了請求,但沒有返回任何內容。
- 206 (部分內容) 服務器成功處理了部分 GET 請求。
- 207 由WebDAV(RFC 2518)擴展的狀態碼,代表之后的消息體將是一個XML消息,並且可能依照之前子請求數量的不同,包含一系列獨立的響應代碼。
3xx (重定向) 表示要完成請求,需要進一步操作。 通常,這些狀態代碼用來重定向。
- 300 (多種選擇) 針對請求,服務器可執行多種操作。 服務器可根據請求者 (useragent)選擇一項操作,或提供操作列表供請求者選擇。
- 301 (永久移動) 請求的網頁已永久移動到新位置。 服務器返回此響應(對 GET 或HEAD請求的響應)時,會自動將請求者轉到新位置。
- 302 (臨時移動) 服務器目前從不同位置的網頁響應請求,但請求者應繼續使用原有位置來進行以后的請求。
- 303 (查看其他位置) 請求者應當對不同的位置使用單獨的 GET 請求來檢索響應時,服務器返回此代碼。
- 304 (未修改) 自從上次請求后,請求的網頁未修改過。 服務器返回此響應時,不會返回網頁內容。
- 305 (使用代理) 請求者只能使用代理訪問請求的網頁。 如果服務器返回此響應,還表示請求者應使用代理。
- 307 (臨時重定向) 服務器目前從不同位置的網頁響應請求,但請求者應繼續使用原有位置來進行以后的請求。
4xx (請求錯誤) 這些狀態代碼表示請求可能出錯,妨礙了服務器的處理。
- 400 (錯誤請求) 服務器不理解請求的語法。
- 401 (未授權) 請求要求身份驗證。 對於需要登錄的網頁,服務器可能返回此響應。
- 402 該狀態碼是為了將來可能的需求而預留的。
- 403 (禁止) 服務器拒絕請求。
- 404 (未找到) 服務器找不到請求的網頁。
- 405 (方法禁用) 禁用請求中指定的方法。
- 406 (不接受) 無法使用請求的內容特性響應請求的網頁。
- 407 (需要代理授權) 此狀態代碼與 401(未授權)類似,但指定請求者應當授權使用代理。
- 408 (請求超時)服務器等候請求時發生超時。
- 409 (沖突) 服務器在完成請求時發生沖突。 服務器必須在響應中包含有關沖突的信息。
- 410 (已刪除) 如果請求的資源已永久刪除,服務器就會返回此響應。
- 411 (需要有效長度) 服務器不接受不含有效內容長度標頭字段的請求。
- 412 (未滿足前提條件) 服務器未滿足請求者在請求中設置的其中一個前提條件。
- 413 (請求實體過大) 服務器無法處理請求,因為請求實體過大,超出服務器的處理能力。
- 414 (請求的 URI 過長) 請求的 URI(通常為網址)過長,服務器無法處理。這比較少見,通常的情況包括:本應使用POST方法的表單提交變成了GET方法,導致查詢字符串(Query String)過長。
- 415 (不支持的媒體類型) 請求的格式不受請求頁面的支持。
- 416 (請求范圍不符合要求) 如果頁面無法提供請求的范圍,則服務器會返回此狀態代碼。
- 417 (未滿足期望值) 服務器未滿足”期望”請求標頭字段的要求。
5xx (服務器錯誤)這些狀態代碼表示服務器在嘗試處理請求時發生內部錯誤。這些錯誤可能是服務器本身的錯誤,而不是請求出錯。
- 500 (服務器內部錯誤) 服務器遇到錯誤,無法完成請求。
- 501 (尚未實施) 服務器不具備完成請求的功能。 例如,服務器無法識別請求方法時可能會返回此代碼。
- 502 (錯誤網關) 服務器作為網關或代理,從上游服務器收到無效響應。
- 503 (服務不可用) 服務器目前無法使用(由於超載或停機維護)。 通常,這只是暫時狀態。
- 504 (網關超時) 服務器作為網關或代理,但是沒有及時從上游服務器收到請求。
- 505 (HTTP 版本不受支持)服務器不支持請求中所用的 HTTP 協議版本。
2.postman
①參數化:
變量參數化{{value}},分隔符用逗號保存,末尾不加分隔符,亂碼問題用另存為選擇utf-8保存review
注:運行的次數等於參數化腳本里的行數,不會迭代運行
②(動靜)檢查點:
選擇Response body:Contains String 靜態檢查(pm.test("Body matches string", function () {pm.expect(pm.response.text()).to.include("string_you_want_to_search");});) ;點擊Get a variable出現的(pm.variables.get("variable_key");放入靜態的pm.test("Body matches string", function () {pm.expect(pm.response.text()).to.include("string_you_want_to_search");});需要檢測字符串的括號中。
③進准匹配:
取result字典中expire-time中的"28800"這個參數
3.charles抓包使用
①設置proxy windows 或者proxy mac
②打斷點攔截(Breakpoint)
③攔截或放行
④修改參數
⑷charles手機抓包(參考鏈接:https://blog.csdn.net/smalCat/article/details/79817398)
①開始對 PC 端 的charles進行配置,點擊proxy(代理),找到代理設置
對代理端口進行進行配置,端口號默認8888,你可以自己修改,選中 enable transparent http prxying,代表啟用http代理;
點擊OK,完后配置。
如果你只想對pc端的數據交互進行抓取,那么到這一步就行了
②對移動端,手機app上面的數據進行抓取
注意事項:手機與pc是否處於同一網絡。
開始配置:打開手機的WIFI功能區,進入鏈接WIFI設置界面,點擊高級設置,進入以下界面,or 點擊代理設置,進入代理設置界面
代理服務器主機名稱 填寫你PC的IP地址,如果你不知道你PC的ip地址,可以在charles上查看到
本地IP地址,點擊local IP Address 后直接就能看到你的PC網絡的IP地址。
端口填寫你在charles上設置的端口,如果你沒有修改端口,依然是8888,那么直接填入8888;
點擊完成or保存,charles會給你一個提示框,是否允許鏈接手機網絡請求;
如下:
點擊允許,ALLOW.
如果把你點擊了否認 Deny,那么你關閉charles,再重新走一遍吧
注:如果沒有彈出提示框,那么請檢查charles是否處於防火牆信任軟件序列里,這個你可以在防火牆設置連看到.
將應用添加進入允許序列里,在不關閉防火牆的情況下,可以抓到數據,如果依然沒有,那么久關閉防火牆,再試一次;
現在,charles就可以抓取手機上的數據了,包括網頁、APP、及其他網絡請求;甚至某些App網絡安全做得不好,你都可以將你的賬戶和密碼在charles上訪問到。
注:這只能對http協議的數據進行抓取.
③ 對https的解析,之前我們抓取http協議數據的時候,會發現一個問題,就是只要是https協議,那么全部是上鎖了,並不能查看到數據。
現在,我們來對https解鎖,因為https對證書加深了認證,所以我們要解鎖,就必須安裝charles的變色龍證書,依靠它,我們可以抓取到很多https裹挾的數據。
④下載證書;點擊charles上的help
安裝PC端的證書,首先點擊install charles root certificate ,會對你進行提示安裝證書,點擊確定安裝
一定要加入 “ 受信任的根證書頒發機構”,不然后續https解析不了;點擊確定,完成PC的安裝;
因為要抓取手機上的https網絡請求數據,手機上也必須安裝證書;
首先點擊:
會出現獲取手機端認證證書網址:
IOS手機,進入該網址就直接會下載改證書,並且安裝它,你直接去設置-》通用-》信任憑證
找到它,信任它;
Andiro手機,進入該網址,會提示你下載證書,下載完成后自動安裝,名稱隨你自己定;
完成安裝后
因為是https,我們還需要在charles上添加ssl proxy服務
完成 ssl proxy 設置,五部曲;
Host:填寫你要抓取API網址
如:
prot:一般填了host就填寫443,手機上不用修改。點擊添加,就會對單獨的host進行數據解析;
如果host和port設置為*,則會解析抓取到的所有https請求;
關於charles的抓包和用於app代理的教程寫完了;
注:如果你在數據抓取活動完成后,關閉了charles,不再進行數據測試,打開瀏覽器,發現不能連接到網絡,
那么,首先你檢查你是否處於聯網狀態,
首先檢查你是否連網:
關閉你的代理: