2015-10-16 22 views
1

我在寫一個簡單的HTTP代理服務器。我可以處理HTTP GET來自瀏覽器的請求。但是,我在處理HTTPS GET請求時遇到問題。 我有一個解析器解析HTTP GET請求,我知道HTTP GET請求的樣子:如何使用Socket的輸入流處理來自瀏覽器的HTTPS獲取請求

GET /路徑HTTP/1.1(\ r \ n)的

頭(鍵:值)(\ r \ n)的

....

(\ r \ n \ r \ n)的

但我不知道如何HTTPS GET看起來像,以及如何解析它。 當從瀏覽器觸發HTTPS請求時,我的代理正在變得奇怪的字符。我相信這是因爲加密。但我怎麼能處理只使用Java的Socket類

try (BufferedReader inputStream = 
      new BufferedReader(new InputStreamReader(socket.getInputStream())); 
     OutputStream outputStream = socket.getOutputStream();) { 
    .... 
} 
+0

加密在演示級別上執行,該級別高於您在其上運行的傳輸級別。 –

回答

2

從瀏覽器的安全請求HTTPS連接,所有你能做的就是轉發收到的數據。該數據已加密,只有目標服務器才能解密。

如果您也想閱讀該請求,則需要說出SSL/TLS,這是底層協議。此外,您還需要一個證書,除非由證書頒發機構簽署且對請求的域有效,否則將阻止瀏覽器顯示內容,因爲它們不信任證書。

+0

所以我怎樣才能知道它是否是HTTPS,因爲你知道我不能解析inputStream,如果它是加密的,我的意思是在轉發之前你應該知道它是簡單套接字還是安全套接字。如果是後者,我應該從Factory創建安全套接字,並獲取請求的服務器證書,但不解析inputStream如何獲取請求的服務器的主機名,或IP – Humoyun

+0

@Humoyun基於端口,HTTP通信使用端口80和HTTPS'443'。 –

+1

當然,:)這麼簡單的解決方案,對我來說是禍患,我怎麼也拿不出這個,反正謝謝 – Humoyun

相關問題