Http訪問有兩種方式,GET和POST,就編程來說GET方式相對簡單點,它不用向服務器提交數據,在這個例程中我使用POST方式,提交數據value1與value2,並從服務器得到他們的和(value1 + value2)。
爲實現Http訪問,微軟提供了二套API:WinINet, WinHTTP。WinHTTP比WinINet更加安全和健壯,可以這麼認爲WinHTTP是WinINet的升級版本。這兩套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, 最後依次關閉request,connect,session句柄。
在這個例程中以上各個流程都進行了簡單封裝,以便對比兩套API函數的些許差異。下面讓源代碼說話,原工程是一個windows控制檯工程,你可以很容易通過拷貝代碼重建工程。
另:如果你從服務器得到的返回數據是utf8格式的文本數據,你將需要對返回的數據進行轉換才能正確顯示中文,日文等。僅供參考,轉換爲ATL CStringW的函數見下:
完整代碼如下: