小白上樓梯0x03-HTTP請求之Ajax

### 從Http請求說起

你現在看到的這些文字,就是依靠一次HTTP請求才得以顯示在你的面前。

HTTP的全英文名是`Hyper Text Transfer Protocol`,翻譯過來叫`超文本傳輸協議`。基於`TCP/IP`通信協議。

既然是一種協議,顧名思義,也是一種約定,約定的雙方叫做`服務端`、`客戶端`,我們用來看網頁的手機、電腦,就是客戶端,而網頁的提供者,比如頭條、webchat這些,便是服務端。一般大家都會叫做`服務器`

HTTP請求中定義了9種請求的方法,用來分別幹不同的事,比如,客戶端單純地想拿到服務器提供的一些信息(比如看一篇文章),一般會使用`GET`方法。客戶端想提交一些信息給服務器(比如登錄或者註冊),一般會使用`POST`方法,其它還有`HEAD`、`PUT`、`DELETE`、`CONNECT`、`OPTIONS`、`TRACE`、`PATCH`這些方法。

服務器在收到一次HTTP請求之後,會返回一個文檔,大概包括兩部分內容,首先是一些`響應頭信息`,告訴客戶端一些關於它的基本信息,比如支持哪些`請求方法`、服務器返回的內容是什麼類型的文件(html或者圖片或者mp4等)、服務器使用的軟件名稱(比如Apache、IIS、Tomcat、nginx、express、hexo),還會包含一個`HTTP狀態碼`(200=請求成功,400=資源未找到,500=服務器內部錯誤),以及一些其它的頭信息。

在`響應頭信息`之後,就是返回的文檔的`主體內容`了,是客戶端發送請求時真正預期得到的資源。可能是一張HTML網頁、一首歌、一張圖片、或者一部電影的一種及多種組合。

在很長的一段時期內,人們都習慣了這種一問一等一答的方式上網。後來有人發現為了更改網頁上的一小點內容也要這樣子一問一等一答,體驗不好,還浪費寬帶和服務器的資源。然後,`傑西·詹姆士·賈瑞特`就提出Ajax技術,用來在網頁上面更新內容,而不必重新刷新一整張網頁。

小白上樓梯0x03-HTTP請求之Ajax

Ajax,其實是一種技術手段

### Ajax,其實是一種技術手段

Ajax的英文全稱是`Asynchronous Javascript and XML`,中文意思是`異步的Javascript和XML`。大家一般都叫`阿佳克斯`,現代瀏覽器基本都實現了對它的支持。

谷歌在線輸入法便是充分利用了ajax技術來實現的。當我們在特定的輸入框輸入字母的時候,會有鍵盤輸入事件被觸發,這個事件會被在線輸入法捕捉並處理,具體步驟是(以五筆為例):

1. 先將輸入的字母做為參數傳入一個特定的網址中間,生成一個完整的訪問地址

2. 向這個完整的訪問地址發起Ajax請求

3. 在收到Ajax請求之後,將收到的數據傳入特定的函數

4. 這個特定的函數會通過數據將剛才輸入的字符替換成我們想要的字符

接下來我會通過一張本地的網頁,發送ajax請求`wqvb(你好)`,`anlw(世界)`給Google在線五筆,大體思路是:

1. 先new(新建)一個`XMLHttpRequest`對象,起名叫`xhr`

2. 給這個`xhr`對象實現一個監聽函數,用來處理返回的數據

3. 使用`xhr`對象的`open`方法,設置發送請求時候使用的`請求方法(GET)`、`Url地址`、`是否異步(true)`

4. 使用`xhr`對象的`send`方法發送請求

5. 在數據返回之後,`xhr`對象會自動調用第2步定義的函數,完成數據的處理

具體步驟,在桌面上面新建文本文檔,改名為`getWB86.html`,它的內容如下:

<code>```html




<title>getWB86/<title>





```/<code>

將網頁直接雙擊打開,效果應該是這樣:


小白上樓梯0x03-HTTP請求之Ajax

利用Ajax請求拿到Google在線五筆的響應文本


後來發現,直接點擊這個網址,Chrome會自動下載一個文本文檔,裡面包含相同的響應文本:

<code>//inputtools.google.com/request?text=wqvb&itc=zh-t-i0-wubi-1986&num=13&cp=0&cs=1&ie=utf-8&oe=utf-8&app=demopage/<code>

那我們是否可以直接通過python來訪問這個地址,以得到想要的響應文本呢,可以直接一試。

下一篇開始嘗試使用Python來完成請求,並且生成一個長數組,不斷地請求,不斷地保存響應文本到一個文本文檔,然後再處理,提取出我們想要的碼錶。

### 使用Python發送HTTP請求

~~這裡先假設你已經安裝好了Ptyhon環境,保存以下代碼為`getARecord.py`。~~

Todo

58282317320


分享到:


相關文章: