深入學習C 網路程式設計之HTTP應用程式設計(上)

2022-09-26 02:18:11 字數 2864 閱讀 6802

我們學習網路程式設計最熟悉的莫過於http,好,我們就從http入手,首先我們肯定要了解一下http的基本原理和作為,對http的工作原理有

一定程度的掌握,對我們下面的學習都是有很大幫助的。

一: 工作方式

①:client和server建立可靠的tcp連線。

②:然後client通過socket向server傳送http請求。

③:server端處理請求,返回處理資料。

④:在http1.0中,client與server之間的tcp連線立即斷開。

但在http1中,因為預設支援「tcp的長連線」,所以server端採用超時才斷開tcp連線的策略。

二: 特點

①:http是無狀態的,這個相信大家都知道,我就不多說了。

②:client通過在http請求中的header裡追加一些資訊來告訴server傳送的主體的相關資訊,比如:主體是什麼型別,什麼編碼。

三:http請求和響應**

相信大家都知道常用的請求方式也就是"get"和「post」,那麼下面就來**下get和post都有哪些好玩的地方,還是上圖說話,首先

我輸入www.baidu.com,會找到如下的請求和響應的資訊。

1: 「request header「:

第一行: get / http/1.1   

這裡面有三個資訊:①"get",表示請求的模式。 ②「/",請求**的根目錄。  ③"http/1.1",這個就是http的版本。

第二行: host

請求目標的**,跟「/"並一起就是"www.baidu.com/"。

第三行: connection

預設為「keep-alive「,這裡就是文章開頭所說的預設支援長連線。

第四行: cache-control

這玩意跟快取有關,其中max-age表示快取的時間(s)。

第五行:user-agent

&n程式設計客棧bsp; 告訴serve我client的身份,一般由瀏覽器決定,比如:瀏覽器型別,版本等等。

第六行:accept

以及後面的accept打頭的都是表明client能夠接收的種類和型別。

最後一行:cookie

如果我們第一次向baidu請求時是沒有cookie資訊這一欄的,因為在瀏覽器下找不到於baidu相關的cookie,

當我們第二次重新整理頁面時,get請求就會找到本地的cookie並附帶給server。

2: "response header":

第一行: http/1.1 200 ok

這個估計大家都知道吧,200表示返回的狀態碼,ok則是描述性的狀態碼。

第二行:date

表示伺服器響應的時間。

第三行: server

響應客戶端的伺服器。

第四行:content-length

表示伺服器返回給客戶端正文的位元組流長度。

第五行:content-type

表示正文的型別。

第七行:expires

&n      程式設計客棧;    告訴client絕對的過期時間,比如2012.1.10,在這個時間內client都可以不用傳送請求而直接從client的cache中獲取,

對js,css,image的快取很有好處,所以說用好了這個屬性對我們http的效能有很大的幫助。

第八行:content-encoding

文件型別的編碼方式,伺服器端採用gzip的形式進行了文件壓縮,此時減小了文件,利於**,但是必須client端支援

gzip的解碼操作。

post的方式也是一樣的,這裡就不說了,上面列舉了這麼多也是希望大家能夠對http的細節要有一定程度的掌握。

四:應用場景

我們在http上面的網路程式設計一般主要做兩件事情。

①:爬資料,模擬登入,自動填表單。

②:檔案的上傳和**。

不過.net對http進行了非常好的封裝,提供了httpwebrequest和httpwebresponse來給我們提供常用操作,如果大家對http協議有個比較

清晰的認識我想類庫裡面的屬性和方法都是神馬和浮雲。

五 :案例

既然是上篇,就根據「模擬登入」的思想做乙個簡單的「暴力破解」的小程式,非常簡單,呵呵。

第一步: 首先我們寫兩個action,乙個login(登入頁面),乙個index(使用者後台首頁)。

} }好了,我們開啟fiddler,輸入admin,admin,點選提交,看看都post些什麼到server端了,方便我們後面的模擬登入,

這裡的head資訊相信大家還是能看懂吧。

第二步:我們新建乙個winform的程式。

/// 暴力破解

///

///

///

private void button1_click(object sender, eventargs e)

else}}

webbrowser2.documenttext = "不好意思,未能破解";

}} }

第三步:我們現在要做的就是點選」暴力破解」,看看能不能給我列舉出來「肉雞**」的使用者名稱和密碼。

呵呵,現實中遠不止這麼簡單,主要還是想讓大家能夠對httpwebreqeust和httpwebresponse有個了解。

深入學習網路程式設計

目錄說明 p6 socket程式設計一 什麼是socket ipv4套接字位址結構 網路位元組序 位元組序轉換函式 位址轉換函式 套接字型別 p7 socket程式設計二 tcp客戶 服務端模型 回射客戶 伺服器 socket,bind,listen,accept,connect p8 socket...

深入學習之http

http協議是無狀態的,指的是協議對於事務處理沒有記憶能力,伺服器不知道客戶端是什麼狀態。也就是說,開啟乙個伺服器上的網頁和你之前開啟這個伺服器上的網頁之間沒有任何聯絡。http是乙個無狀態的面向連線的協議,無狀態不代表http不能保持tcp連線,更不能代表http使用的是udp協議 無連線 從 h...

C 網路程式設計之HTTP工具類

auth lyk date 2017 9 20 11 24 05 namespace uploadanddownloaddatas else 獲取伺服器返回的資訊 將字串上傳到伺服器 伺服器的url 上傳資訊說明 上傳的字串 錯誤資訊 返回伺服器返回的資訊 public static string ...