用WinINet和WinHTTP訪問網站

Http訪問有兩種方式,GETPOST,就編程來說GET方式相對簡單點,它不用向服務器提交數據,在這個例程中我使用POST方式,提交數據value1value2,並從服務器得到他們的和(value1 + value2)。

爲實現Http訪問,微軟提供了二APIWinINet, WinHTTPWinHTTPWinINet更加安全和健壯可以這麼認爲WinHTTPWinINet的升級版本這兩套API包含了很多相似的函數與宏定義,呵呵,詳細對比請查閱msdn中的文章“Porting WinINet Applications to WinHTTP”,在線MSDN連接:http://msdn2.microsoft.com/en-us/library/aa384068.aspx。在這個例程中,通過一個宏的設置來決定是使用WinHttp還是WinINet。代碼如下:

#define USE_WINHTTP      //Comment this line to user wininet.

下面來說說實現Http訪問的流程(兩套API都一樣的流程):

1, 首先我們打開一個Session獲得一個HINTERNET session句柄;

2, 然後我們使用這個session句柄與服務器連接得到一個HINTERNET connect句柄;

3, 然後我們使用這個connect句柄來打開Http 請求得到一個HINTERNET request句柄;

4, 這時我們就可以使用這個request句柄來發送數據與讀取從服務器返回的數據;

5, 最後依次關閉requestconnectsession句柄。

 

在這個例程中以上各個流程都進行了簡單封裝,以便對比兩套API函數的些許差異。下面讓源代碼說話,原工程是一個windows控制檯工程,你可以很容易通過拷貝代碼重建工程。

 

另:如果你從服務器得到的返回數據是utf8格式的文本數據,你將需要對返回的數據進行轉換才能正確顯示中文,日文等。僅供參考,轉換爲ATL CStringW的函數見下:

 

完整代碼如下:

發佈了12 篇原創文章 · 獲贊 0 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章