目錄
1、通過form表單構(gòu)造HTTP請求
2、通過JS的ajax構(gòu)造HTTP請求
3、Postman的安裝和簡單使用
常見的構(gòu)造HTTP請求的方式有一下幾種:
- 直接通過瀏覽器的地址欄,輸入一個(gè)URL,就可以構(gòu)造一個(gè)GET請求
- HTML中的一些特殊標(biāo)簽,也會(huì)觸發(fā)GET請求,例如:link、script、img、a....
- 通過form表單標(biāo)簽可以實(shí)現(xiàn)GET和POST請求的構(gòu)造
- 通過JS中ajax實(shí)現(xiàn)各種請求的構(gòu)造
在編寫前端程序的時(shí)候,通常使用HTML和JS來構(gòu)造請求。再簡單方便一點(diǎn),我們還可以使用一些工具來構(gòu)造HTTP請求,例如使用postman軟件。
1、通過form表單構(gòu)造HTTP請求
form表單標(biāo)簽是HTML中的一個(gè)常用標(biāo)簽,可以用于個(gè)服務(wù)器發(fā)送GET或者POST請求。
??form發(fā)送GET請求
<form action="http://www.baidu.com/abc" method="GET">
<input type="text" name="userId">
<input type="password" name="password">
<input type="submit" value="提交">
</form>
form標(biāo)簽的一些屬性:
- action:表示構(gòu)造的HTTP請求的URL是什么
- method:表示構(gòu)造的HTTP請求的方法是GET還是POST(form只支持HTTP方法GET和POST)
下面我們來看請求構(gòu)造的請求返回的頁面和抓到的這個(gè)請求的報(bào)。?
?
這里我們就來看一下我們寫的代碼和填寫的表單,與形成的請求的首行之間的聯(lián)系。
???form表單發(fā)送post請求
構(gòu)造一個(gè)POST請求,我們只需要將form表單中的method屬性的值改為POST即可。
<form action="http://www.baidu.com/abc" method="POST">
<input type="text" name="userId">
<input type="password" name="password">
<input type="submit" value="提交">
</form>
我們通過fiddler抓取我們構(gòu)造的這個(gè)報(bào)來看一下。?
?可以看見我們構(gòu)造的POST請求,首行中沒有查詢字符串(query string), 但是請求正文中出現(xiàn)了我們在網(wǎng)頁表單上填寫的內(nèi)容。這個(gè)時(shí)候請求頭(header)中出現(xiàn)了Content-Length和Content-Type字段,用來表示請求正文中的內(nèi)容的長度和內(nèi)容的構(gòu)造格式。與GET的理解方式相似,代碼和輸入框與POST請求的的對(duì)應(yīng)關(guān)系,這里就不再展示。
2、通過JS的ajax構(gòu)造HTTP請求
從前端角度,處理瀏覽器地址欄能構(gòu)造GET請求,form表單能構(gòu)造GET和POST請求之外,還可以通過ajax的方式來構(gòu)造HTTP請求。當(dāng)然ajax的功能比form更加強(qiáng)大。
ajax是Asynchronous JavaScript And XML的縮寫。ajax是前端和后端異步交互的一種方式。
1??這里的XML是一種基于標(biāo)簽形式的自定義數(shù)據(jù)格式的方式,XML和HTML都是由標(biāo)簽構(gòu)成的,對(duì)于html來說,它的標(biāo)簽數(shù)量和含義都是由標(biāo)準(zhǔn)委員會(huì)規(guī)定好的,但是相對(duì)于XML來說,它的標(biāo)簽都是自定義的。XML和前端沒有關(guān)系,這只是數(shù)據(jù)的一種組織方式。XML的格式如下
<request>
<userld>zhangsan</userId>
<password>12346</password>
<age>20</age>
</request>
?2??Asynchronous這個(gè)詞的含義是"異步"。說到這里有沒有老鐵聯(lián)想到synchronized,它表示的是"同步"。
??我們在加鎖的場景中,synchronized認(rèn)為是互斥的。就是在同一時(shí)間多個(gè)線程訪問同一個(gè)資源,只有一個(gè)線程能夠訪問,其他線程需要阻塞等待;
??在IO場景中,同步和異步的區(qū)別是,同步表示在請求的發(fā)起者,自行獲取響應(yīng)。異步表示請求的發(fā)起者不關(guān)心結(jié)果,而是由被請求的這一方,計(jì)算成結(jié)果之后,把結(jié)果推送給發(fā)起者。這個(gè)的區(qū)別就是請求發(fā)出后是否主動(dòng)獲取響應(yīng)結(jié)果。
這里我們通過一個(gè)例子來了解一下IO場景下的同步和異步。你去餐館吃飯,給老板說"老板來份油潑面",然后站在窗口等,老板做好之后,你自己端著飯找位置坐下。而異步就是你對(duì)老板說了之后,你就不管了,老板把飯做好之后,端到你面前來。只關(guān)注飯(響應(yīng))是你自己獲取還是老板給你送。
3??JS中提供了原生的ajax的api,但是使用起來比較麻煩,所以我們這里使用JQuery里面的提供ajax的api來構(gòu)造HTTP請求。這里小編已經(jīng)jQuery下載到了本地,使用的相對(duì)地址引入的jQuery,但是我們也可以找到j(luò)Query的網(wǎng)絡(luò)路徑,將其引入到代碼中。在編寫代碼的時(shí)候,使用jQuery時(shí),可以使用$符號(hào)表示jQuery,也可以使用完成的單詞來表示,這里小編更建議使用完成的單詞表示,因?yàn)橛械膸煲矔?huì)使用$符號(hào)作為變量名,我們在代碼中如果引入了不止一個(gè)庫,那么就會(huì)容易出現(xiàn)錯(cuò)誤。
下面時(shí)使用jQuery構(gòu)造一個(gè)請求的基本格式,當(dāng)然ajax方法中可以設(shè)置的字段不止代碼中出現(xiàn)的這些。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>ajax</title>
<script src="../jquery.min.js"></script>
</head>
<body>
<script>
jQuery.ajax({
url:"https://www.baidu.com",
type:"get",
data:"這是 body",
contentType:"text/plain",
//此處success就聲明了一個(gè)回調(diào)函數(shù),會(huì)在服務(wù)器返回一個(gè)正確的響應(yīng)的時(shí)候,被瀏覽器自動(dòng)執(zhí)行。
//這里的執(zhí)行過程就是"異步"的。
//在我們頁面的JS中,把請求發(fā)送出去之后就不管了,就繼續(xù)執(zhí)行后續(xù)的代碼,直到服務(wù)器將響應(yīng)返回來之后,
//瀏覽器將這個(gè)響應(yīng)給我們的代碼之后,瀏覽器才會(huì)執(zhí)行該方法。
success: function(body) {
//這里寫處理響應(yīng)的代碼
alert(body);
}
});
</script>
</body>
</html>
這里需要了解一下回調(diào)函數(shù),回調(diào)函數(shù)就是在代碼執(zhí)行的時(shí)候,并不會(huì)立即執(zhí)行,而是在等到合適的時(shí)機(jī)再執(zhí)行,例如在多線程中重寫run方法和lambda表達(dá)式都是回調(diào)函數(shù),還有集合類中的Comparable接口中的compare To方法和Comparator接口中的compare方法在代碼中使用的時(shí)候都是回調(diào)的。
將上述的代碼運(yùn)行,給百度的服務(wù)器發(fā)送請求,代碼在執(zhí)行的過程中會(huì)出錯(cuò)。
?這個(gè)報(bào)錯(cuò)是ajax的一個(gè)典型的跨域問題,這是瀏覽器為了限制安全問題引入的保護(hù)機(jī)制。使用ajax構(gòu)造的請求,要求運(yùn)行ajax代碼的頁面的域名,要和ajax里請求訪問的域名是一致的,兩個(gè)域名不一致的話,哪怕服務(wù)器給你響應(yīng)了數(shù)據(jù),瀏覽器也不能處理,還是會(huì)報(bào)錯(cuò)。但是form表單標(biāo)簽構(gòu)造請求是可以跨域訪問的,即a網(wǎng)站的頁面可以請求b網(wǎng)站的數(shù)據(jù)。
?總結(jié)
ajax相比于form功能更強(qiáng),構(gòu)造請求更靈活,form只支持get和post兩種HTTP方法,而ajax不僅可以支持這兩種HTTP方法,還可以支持put、delete等,ajax還可以靈活的設(shè)置header和body.
3、Postman的安裝和簡單使用
上述的重點(diǎn)說到的構(gòu)造請求的方式,不論哪一種,構(gòu)造請求都是需要我們手動(dòng)寫代碼的,但是這里使用的Postman在構(gòu)造請求的時(shí)候他會(huì)自己生成某種語言的HTTP請求。點(diǎn)擊這個(gè)連接就可以進(jìn)入官網(wǎng):https://www.postman.com/downloads/下載。
點(diǎn)擊進(jìn)入官網(wǎng)頁面之后,按照下面的步驟進(jìn)行就可以了。
下載完成之后,需要我們自己創(chuàng)建一個(gè)用戶,創(chuàng)建完成之后,第一次登錄Postman的頁面是這個(gè)樣子需要點(diǎn)擊workspaces創(chuàng)建一個(gè)工作空間。
?文章來源地址http://www.zghlxwxcb.cn/news/detail-583095.html
?點(diǎn)擊+,創(chuàng)建一個(gè)標(biāo)簽頁。
?構(gòu)造HTTP請求。
?以上說到就是Postman最基本的用法,還有一個(gè)好用的地方就是點(diǎn)擊</>符號(hào),它可以生成各種語言的構(gòu)造HTTP請求的代碼。想要使用jQuery版本的代碼,直接選中,復(fù)制放在jQuery的代碼中就可以使用,前提是你在代碼中引入了jQuery。
?
文章來源:http://www.zghlxwxcb.cn/news/detail-583095.html
?
到了這里,關(guān)于【JavaEE】HTTP請求的構(gòu)造的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!