2014-09-04 64 views
1

我想在網頁瀏覽器中打開網站。我知道這很容易,但我想用不同的方式做... 它就像代理服務器。我已經做了一個Java代碼,將獲得網頁的內容(源代碼),當瀏覽器請求本地主機上的特定端口號這個代碼在瀏覽器中寫入源代碼。但不是獲取網頁,我正在瀏覽器中獲取網頁的源代碼,並且我想從java代碼發出一個請求作爲瀏覽器的幻覺意味着服務器應該感覺到該請求是由瀏覽器創建的,而不是從java控制檯創建的。作爲網頁瀏覽器的幻象在java中打開網站代碼

import java.net.*; 
import java.io.*; 

public class URLConnectionReader { 
public static void main(String args[]) throws Exception{ 
    URL ul = null; 
    HttpURLConnection ulc = null; 

    ServerSocket server = null; 
    Socket client = null; 
    DataInputStream in = null; 
    DataOutputStream out = null; 
    String c = null; 

     server = new ServerSocket(9898); 
     System.out.println("Server is waiting for clients on port no 9898...."); 
     while(client == null){ 
     client = server.accept(); 
     } 
     System.out.println("Connected....."); 
     out = new DataOutputStream(client.getOutputStream()); 

     ul = new URL("http://www.google.com"); 
     ulc = (HttpURLConnection)ul.openConnection(); 
     in = new DataInputStream(ulc.getInputStream()); 

     while((c = in.readLine())!=null){ 
      out.writeBytes(c); 
     } 
     in.close(); 
     out.close(); 
     client.close(); 

} 
} 
+0

嘗試將數據發送到文本文件,然後使用該文本文件作爲源,並與它一起玩,特別是頭。也請務必嘗試在Chrome和Firefox中查看網頁源代碼。 – 2014-09-04 08:51:43

+0

這是工作,我已經做到了,但我想要在瀏覽器和我的本地主機服務器之間的直接通信...... BT的行爲是不可預知的。有時它正在工作,有時不是。因此,我需要一種方法來處理由google.com提供的資源(在本例中).simple文本保存在字符串中並在客戶端(瀏覽器)上寫入。但它不起作用所有時間 – 2014-09-04 09:13:58

+0

你需要使用google.com嗎?也許你可以使用一個不太複雜的頁面? – 2014-09-04 12:06:23

回答

0

加載網頁並不像您想象的那麼簡單。瀏覽器和服務器都使用名爲HTTP的協議。簡而言之,瀏覽器發送一個請求,其中包含一個請求行,頭文件和有時候數據,服務器用響應行,頭文件和數據進行響應。大多數網頁還包含需要加載的用於顯示頁面的相關資源(如圖像,樣式表和腳本),並且每個資源都通過單獨的請求加載。

您的程序只接受一個請求,完全忽略請求的詳細信息,然後加載一個固定的網頁並將其作爲響應發送。您正在加載網頁的方式(使用URL),您只能獲取響應的數據部分(頁面源);響應行和標題丟失。標題非常重要,因爲它們之一(名爲「Content-Type」)指定它是什麼類型的資源 - 網頁,圖像或其他內容。沒有它,瀏覽器通常會假定數據是純文本並相應地顯示它。

因此,如果您希望您的實驗更好地工作,則需要確保向瀏覽器發送完整且有效的HTTP響應。您可能可以重建HttpURLConnection對象的響應行和標題。或者您可以直接使用套接字來加載網頁。

更好的解決方案是使用一個java web服務器(比如Jetty),在其中運行一個servlet,使用HTTP客戶端庫(例如Apache HttpComponents)加載遠程頁面,並進行必要的處理地址和標題。但..小步驟:)

+0

好的..這是完成..我設置user_agent,字符集和內容類型現在它給了我沒有風格的頁面...但我怎麼現在可以得到所有這些文件和資源使用頭?你能給我任何鏈接嗎? – 2014-09-04 08:30:18

+0

對不起老兄..我迷惑..我添加了必要的標題,但仍然我的程序的行爲是不可預知的...我的意思是有時它顯示的網頁和有時只是純文本(源代碼)... – 2014-09-04 08:41:10

相關問題