2012-12-22 63 views
3

我需要向我的站點發送HTTP GET請求,然後獲取頁面的內容並解析它。我寧願不使用像libCURL這樣的庫,因爲我希望最終的應用程序完全獨立(這是引用個人經驗,我可能是錯誤的,但如果我記得客戶端必須有某些動態鏈接庫才能使用libCURL運行應用程序),我在Visual Studio 2012中使用C++。在C++中獲取HTTP請求

代碼示例也很好。

+0

你問的如何使用winsock2? – nurettin

+0

打開一個套接字(),發送()你的請求,recv()你的答案..你已經試過了什麼?你卡在哪裏?我們該怎樣幫助你? – cmc

+4

如果您不想處理分發DLL,您可以始終靜態鏈接libcurl,而不是動態鏈接它。 –

回答

8

當你不想使用外部庫時,你將不得不自己實現HTTP。當你只需要基本的功能(直接下載文件,不需要重定向,沒有代理,沒有cookies,沒有認證,不需要加密,沒有壓縮,沒有其他惡意)時,這並不困難。

創建一個Socket,它連接到您的網絡服務器的80端口,併發送以下字符串到服務器:

"GET /example.html HTTP/1.1\r\n" 
"Host: www.example.com\r\n" 
"\r\n" 

這從服務器請求文件www.example.com/example.html你連接到。

服務器將響應一個自己的HTTP響應頭,然後是數據(或錯誤描述)。

2
  1. 大多數庫可以靜態編譯。當你使用靜態庫時,它會被鏈接到你的可執行文件中,而且你不必運送庫的DLL。也許這會有所幫助:Walkthrough: Creating and Using a Static Library (C++)
  2. 某些庫可能僅用於標題或僅用於純標題模式:編譯器會將庫引入源代碼。再次,沒有爲該庫生成DLL。例如,您可以嘗試getting Asiocpp-netlib以僅爲標題模式工作。還有一個簡單的http客戶端只是爲了Asio躺在某個地方。
  3. 認爲你可以使用WinINetWinHTTP沒有運送任何DLL。
+2

WinInet/WinHTTP DLL已經安裝在操作系統中。您不需要自己部署這些DLL,但它們仍然是DLL。 –