国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

構(gòu)造http請求的幾種方式(附源碼)

這篇具有很好參考價值的文章主要介紹了構(gòu)造http請求的幾種方式(附源碼)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


前言

博主個人社區(qū):開發(fā)與算法學(xué)習(xí)社區(qū)

博主個人主頁:Killing Vibe的博客

歡迎大家加入,一起交流學(xué)習(xí)~~

一、form表單構(gòu)造http請求

form (表單) 是 HTML 中的一個常用標(biāo)簽. 可以用于給服務(wù)器發(fā)送 GET 或者 POST 請求.

form 的重要參數(shù):

  • action: 構(gòu)造的 HTTP 請求的 URL 是什么.
  • method: 構(gòu)造的 HTTP 請求的 方法 是 GET 還是 POST (form 只支持 GET 和 POST).

input 的重要參數(shù):

  • type: 表示輸入框的類型. text 表示文本, password 表示密碼, submit 表示提交按鈕.
  • name: 表示構(gòu)造出的 HTTP 請求的 query string 的 key. query string 的 value 就是輸入框的用戶
    輸入的內(nèi)容.
  • value: input 標(biāo)簽的值. 對于 type 為 submit 類型來說, value 就對應(yīng)了按鈕上顯示的文本.
 <form method="get" action="/collect">
     <input type="text" name="today">
     <input type="text" name="result">
     <button>提交</button>
</form>
 <form method="post" action="/collect">
    <input type="text" name="today">
    <input type="text" name="result">
    <button>提交</button>
</form>

以下是/collect資源,支持get和post請求:

構(gòu)造http請求的幾種方式(附源碼)

打開所在的頁面,輸入,并點擊提交(以post為例子):

構(gòu)造http請求的幾種方式(附源碼)

打開開發(fā)者工具的網(wǎng)絡(luò)面板可以觀察到:

請求頭和響應(yīng)頭為:

構(gòu)造http請求的幾種方式(附源碼)

請求體為:構(gòu)造http請求的幾種方式(附源碼)
get方法同理,只是請求體中的數(shù)據(jù)去到了請求頭中變成查詢字符串了。

二、ajax構(gòu)造http請求

從前端角度, 除了瀏覽器地址欄能構(gòu)造 GET 請求, form 表單能構(gòu)造 GET 和 POST 之外, 還可以通過 ajax的方式來構(gòu)造 HTTP 請求. 并且功能更強大.

ajax 全稱 Asynchronous Javascript And XML, 是 2005 年提出的一種 JavaScript 給服務(wù)器發(fā)送
HTTP 請求的方式.
特點是可以不需要 刷新頁面/頁面跳轉(zhuǎn) 就能進(jìn)行數(shù)據(jù)傳輸.

在 JavaScript 中可以通過 ajax 的方式構(gòu)造 HTTP 請求.

<!DOCTYPE html>
<html lang="zh-hans">
<head>
    <meta charset="UTF-8">
    <title>發(fā)送有請求體的 ajax 請求</title>
</head>
<body>
    <script src="/js/ajax-send-request-body.js"></script>
</body>
</html>

以下是js代碼:

// 1. 創(chuàng)建 XMLHttpRequest 對象
var xhr = new XMLHttpRequest()
// 2. 調(diào)用 open 方法設(shè)置要訪問的 url
xhr.open('post', '/collect')
// 3. 默認(rèn)異步處理響應(yīng). 需要掛在處理響應(yīng)的回調(diào)函數(shù).
xhr.onload = function() {
    console.log(xhr)
    console.log(this)
    console.log(this.status)
   console.log(this.getResponseHeader('location')) // header 中的 name 不區(qū)分大小寫
   console.log(this.responseText)
}

// 區(qū)別在這里, 調(diào)用 setRequestHeader 設(shè)置請求頭。設(shè)置類型是text類型, 也可以是application/x-www-form-urlencoded 類型
xhr.setRequestHeader('Content-Type', 'text/killingvibe')
// 4. 調(diào)用 send 方法發(fā)送 http 請求
xhr.send('我隨便寫,按照 content-type 的格式去寫就行')

地址欄輸入http://127.0.0.1:8080/ajax-send-request-body.html 后,打開網(wǎng)絡(luò)面板,我們可以看到三個請求包,

構(gòu)造http請求的幾種方式(附源碼)

拓展:

發(fā)送 application/json 數(shù)據(jù),只需要將上述代碼下面改成如下:

// 調(diào)用 setRequestHeader 設(shè)置請求頭
httpRequest.setRequestHeader('Content-Type', 'application/json');
// 4. 調(diào)用 send 方法發(fā)送 http 請求
httpRequest.send(JSON.stringify({
name: 'zhangsan',
age: 18
}));

三、Java socket構(gòu)造http請求

所謂的 “發(fā)送 HTTP 請求”, 本質(zhì)上就是按照 HTTP 的格式往 TCP Socket 中寫入一個字符串.
所謂的 “接受 HTTP 響應(yīng)”, 本質(zhì)上就是從 TCP Socket 中讀取一個字符串, 再按照 HTTP 的格式來解析.
我們基于 Socket 的知識, 完全可以構(gòu)造出一個簡單的 HTTP 客戶端程序, 用來發(fā)送各種類型的 HTTP 請求.

客戶端代碼:

public class MyHttpClient {
    public static void main(String[] args) throws Exception {
        // 只能進(jìn)行一次請求-響應(yīng)的 HTTP 客戶端
        // 主機(jī)                  127.0.0.1
        // 端口(進(jìn)程)           8080
        // 資源路徑              /hello.html
        try (Socket socket = new Socket("127.0.0.1", 8080)) {
            // 準(zhǔn)備 HTTP 請求內(nèi)容
            // 文本   String

            // 格式:請求行
            String requestLine = "GET /hello.html HTTP/1.0\r\n";
            // 請求頭:完全可以沒有,但必須一個空行結(jié)尾
            String requestHeader1 = "Name: killingvibe\r\n\r\n";  // 請求頭中共有 1對 key-value
            String requestHeader2 = "Name: killingvibe\r\nAge: 1999\r\n\r\n";    // 請求頭中共有 2對 key-value
            String requestHeader3 = "\r\n"; // 請求頭中共有 0 對 key-value
            // 請求體,GET 是沒有請求體

            // 最終的請求 —— 要發(fā)送給服務(wù)器的東西
            String request = requestLine + requestHeader3;

            // 發(fā)送服務(wù)器的過程
            byte[] requestBytes = request.getBytes("ISO-8859-1");   // 字符集編碼

            // 發(fā)送(數(shù)據(jù)會經(jīng)由 TCP、IP、以太網(wǎng)發(fā)送給服務(wù)器)
            OutputStream os = socket.getOutputStream();
            os.write(requestBytes);
            os.flush();

            // 請求既然已經(jīng)發(fā)送,我們要做的就是等待響應(yīng)
            InputStream is = socket.getInputStream();
            Scanner scanner = new Scanner(is, "UTF-8"); // 響應(yīng)的前面字符集應(yīng)該是 ISO-8859-1,后邊是 UTF-8
            while (scanner.hasNextLine()) {
                String line = scanner.nextLine();
                System.out.println(line);
            }
        }
    }
}

服務(wù)端代碼:

public class MyHttpServer {
    public static void main(String[] args) throws Exception {
        // 我們也監(jiān)聽在 8080 端口上
        try (ServerSocket serverSocket = new ServerSocket(8080)) {
            while (true) {
                Socket socket = serverSocket.accept();  // 三次握手完成

                // 讀取用戶的請求 :咱這里就不管用戶的請求是啥了,一律采用相同的方式返回響應(yīng)

                // 發(fā)送響應(yīng)
                // Content-Type: 瀏覽器應(yīng)該按照什么格式來看到我們響應(yīng)的資源內(nèi)容的(資源內(nèi)容放在響應(yīng)體中)
                // 響應(yīng)體(資源的內(nèi)容)
                String responseBody = "<h1>Welcome MyHttpServer</h1>";
                byte[] responseBodyBytes = responseBody.getBytes("UTF-8");
                int contentLength = responseBodyBytes.length;

                System.out.println("發(fā)送響應(yīng)");
                String response = "HTTP/1.0 200 OK\r\n"
                        + "Server: killingvibeServer\r\n"
                        + "Content-Type: text/plain; charset=utf-8\r\n"       // 響應(yīng)體的類型
                        + "Content-Length: " + contentLength + "\r\n"        // 響應(yīng)體的長度
                        + "\r\n";

                byte[] responseBytes = response.getBytes("ISO-8859-1");
                OutputStream os = socket.getOutputStream();
                // TCP 是面向字節(jié)流的一種協(xié)議,所以只要按順序發(fā)即可,不要管分幾次發(fā)送
                os.write(responseBytes);    // 先發(fā)送前面部分(響應(yīng)行 和 響應(yīng)頭)
                os.write(responseBodyBytes);    // 再發(fā)送響應(yīng)體
                os.flush();

                // 發(fā)送完成之后,直接關(guān)閉 TCP 連接(短連接的處理模式)
                socket.close();
            }
        }
    }
}

控制臺打印如下:

構(gòu)造http請求的幾種方式(附源碼)

總結(jié)

以上就是構(gòu)造http請求的三種方式,總結(jié)應(yīng)該還算到位,相關(guān)步驟都寫在了代碼注釋里面,覺得有幫助可以點贊收藏,有什么不足之處歡迎私信博主。文章來源地址http://www.zghlxwxcb.cn/news/detail-406436.html

到了這里,關(guān)于構(gòu)造http請求的幾種方式(附源碼)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • hutool Http 工具發(fā)送POST請求的幾種方式

    ? ? ? ? 目錄 依賴 ??Maven ??Gradle 實踐 hutool源碼 hutool調(diào)用實踐 其它自定義項 ????????本質(zhì)上,HttpUtil中的get和post工具方法都是HttpRequest對象的封裝,因此如果想更加靈活操作Http請求,可以使用HttpRequest。今天咱們就列舉一下hutool工具中常用的幾種發(fā)送post請求的方式。

    2024年02月08日
    瀏覽(23)
  • Java實現(xiàn)HTTP請求的幾種方式-CloseableHttpClient(三)

    Java實現(xiàn)HTTP請求的幾種方式-CloseableHttpClient(三)

    CloseableHttpClient是在HttpClient的基礎(chǔ)上修改更新而來的,這里還涉及到請求頭token的設(shè)置(請求驗證),利用fastjson轉(zhuǎn)換請求或返回結(jié)果字符串為json格式,當(dāng)然上面兩種方式也是可以設(shè)置請求頭token、json的,這里只在下面說明。 基于第一章的測試接口,建立以下程序 創(chuàng)建客戶端

    2023年04月20日
    瀏覽(100)
  • Java實現(xiàn)HTTP請求的幾種方式-HttpURLConnection(一)

    在實際開發(fā)過程中,我們經(jīng)常需要調(diào)用對方提供的接口或測試自己寫的接口是否合適。很多項目都會封裝規(guī)定好本身項目的接口規(guī)范,所以大多數(shù)需要去調(diào)用對方提供的接口或第三方接口(短信、天氣等)。 準(zhǔn)備兩個項目: 項目A: 服務(wù)提供者 項目B:服務(wù)消費者 在項目A中

    2024年02月16日
    瀏覽(21)
  • http請求和響應(yīng)格式說明,http的get和post請求方式說明,http的請求體body的幾種數(shù)據(jù)格式

    http請求和響應(yīng)格式說明,http的get和post請求方式說明,http的請求體body的幾種數(shù)據(jù)格式

    一個HTTP請求報文由 請求行(request line)、請求頭部(header)、空行和請求數(shù)據(jù) 4個部分組成, 請求報文的一般格式 1、第一行必須是一個請求行(request-line),用來說明請求類型,要訪問的資源以及所使用的HTTP版本 2、緊接著是一個請求頭(header),用來說明服務(wù)器要使用的附加信息

    2024年02月02日
    瀏覽(29)
  • java發(fā)送http請求的幾種方式,調(diào)用第三方接口的方法:HttpUtil、HttpURLConnection等

    參考:https://blog.csdn.net/yubin1285570923/article/details/126225347 put請求 post帶請求頭 get、delete類似… 使用JDK原生提供的net,無需其他jar包,代碼如下: 需要用到commons-httpclient-3.1.jar,maven依賴如下: 看一下我實際應(yīng)用的例子 需要用到httpclient-4.5.6.jar,maven依賴如下: RestTemplate 是由

    2024年01月18日
    瀏覽(34)
  • http的請求體body的幾種數(shù)據(jù)格式

    http的請求體body的幾種數(shù)據(jù)格式

    http的請求體body的幾種數(shù)據(jù)格式:multipart/form-data;application/x-www-from-urlencoded;raw;binary key - value 格式,主要用來上傳文件,它會將表單的數(shù)據(jù)處理成一條消息,以標(biāo)簽為單元,用分隔符分開。當(dāng)上傳的字段是文件時,會有Content-Type來說明文件類型;content-disposition,用來說明

    2024年02月08日
    瀏覽(23)
  • 接口測試-關(guān)于postman的幾種參數(shù)請求方式

    接口測試-關(guān)于postman的幾種參數(shù)請求方式

    (1)POST的數(shù)據(jù)類型 對于post請求方式,一般都是要對請求發(fā)送相應(yīng)的一些參數(shù)的,而參數(shù)的注入一般填寫在Body中。 ?如上圖所示,在Body中,有多種類型選擇: none:一般都不使用 form-data: ?對于form-data,是采用鍵值對的方式進(jìn)行存儲,即將該表單的數(shù)據(jù)組織成Key-Value形式,

    2024年02月12日
    瀏覽(37)
  • js fetch請求中斷的幾種方式

    js fetch請求中斷的幾種方式

    這是官方標(biāo)準(zhǔn)手段,真正意義的阻止請求(不支持ie) 后端接口設(shè)置的兩秒返回數(shù)據(jù) 默認(rèn)結(jié)果: 解開定時器后: 通過promise,成功用resolve返回,失敗用reject返回(瀏覽器上,請求依然會發(fā)出,并得到響應(yīng)) 第一種方法: 運行結(jié)果: 第二種方法:

    2024年02月12日
    瀏覽(27)
  • 使用OkHttp發(fā)送POST請求的幾種方式

    本文將介紹 OkHttp 客戶端的基本用法。 主要介紹 OkHttp 3.x 版本中發(fā)送Post請求的幾種方式。 使用 FormBody.Builder 構(gòu)造基本的 RequestBody , 包含兩個參數(shù):用戶名、密碼,發(fā)送 POST請求。 如果要對請求進(jìn)行身份驗證,可以使用 Credentials.basic 構(gòu)建器向請求頭中添加憑據(jù)。 下面代碼給

    2024年02月13日
    瀏覽(23)
  • Web:前端常用的幾種Http請求GET和POST樣例

    Web:前端常用的幾種Http請求GET和POST樣例

    1、簡述 在Web開發(fā)過程中,少不了發(fā)起Http請求服務(wù)端的接口數(shù)據(jù),在不同的框架中使用了不同的Http請求方式,常用的請求有fetch、 ajax、 axios、XMLHttpRequest、request,以下樣例僅供參考。 2、Fetch Fetch API 是一種 JavaScript API,是一種基于 Promise 的現(xiàn)代API,用于在網(wǎng)絡(luò)中發(fā)送和接收

    2024年02月07日
    瀏覽(15)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包