2012-03-07 54 views
0

我正在編寫C代碼,試圖使一個非常基本的代理服務器只是一些網絡實踐。我的目標是使用我的代理從瀏覽器獲得「GET」請求,然後將其轉發給適當的服務器,從服務器獲取信息,然後將所有數據發送回瀏覽器。到目前爲止,我得到了第一部分工作,即獲得了GET命令的內容。現在我真的被困在「轉發」部分。我如何將GET的內容轉發到它應該去的地方,比如說www.example.com並且獲取這些信息?我顯然不能使用相同的套接字描述符,並嘗試使用發送命令,因爲那樣我會將GET命令發送回試圖發送它的瀏覽器。我一直在使用Beej的指南和隨機在線技巧。這不是我的第一個網絡程序,但我肯定在這裏停留。我以爲我將不得不做一個DNS查找主機(這是在GET),獲得IP,然後使用getaddrinfor +連接,但然後連接給出錯誤,連接被拒絕。任何提示或提示將對我非常有幫助..感謝轉發代理服務器中的GET請求C

編輯:我正在關注堆棧中的另一個答案,詳細介紹了所涉及的步驟。基本上,我到「重建/發送新的請求部分」

Open port 
Listen on port 
Get all request sent from the client to that port (maybe make the whole thing multithreaded to be able to handle more than 1 request at a time) 
Determine if it is a valid HTTP 1.0 request 
Extract the request components 
Rebuild the request according to what type of proxy you are 
Send the new request 
Get the response 
Send response to client 

EDIT2:HTTP 1.1代理

+0

如果目標服務器關閉,則無法做很多事情。 getaddrinfo()可能會返回多個addrinfo結構體,你檢查所有的結果嗎? – ldx 2012-03-07 13:11:32

+0

你正在執行什麼樣的代理?一個HTTP代理? SOCKS代理? – 2012-03-07 21:30:32

+0

它是一個HTTP 1.1代理 – UNA 2012-03-07 23:02:57

回答

0

所有你必須在HTTP代理做的是落實,即認識並採取行動, CONNECT命令。一旦你得到了這個工作,其他的一切都只是來回複製字節。

相關問題