2011-12-23 19 views
9

से वेब पेज का स्रोत कोड कैसे प्राप्त करें I जावा से किसी भी वेब पेज का स्रोत कोड पुनर्प्राप्त करना चाहता हूं। मैं अब तक समाधान के बहुत सारे मिल गया, लेकिन मैं किसी भी कोड है कि नीचे सभी लिंक के लिए काम करता है नहीं पा सके:जावा

मेरे लिए मुख्य समस्या यह है कि कुछ कोड वेब पेज स्रोत कोड पुनर्प्राप्त करते हैं, लेकिन गायब वाले लोगों के साथ। उदाहरण के लिए नीचे दिया गया कोड पहले लिंक के लिए काम नहीं करता है।

InputStream is = fURL.openStream(); //fURL can be one of the links above 
BufferedReader buffer = null; 
buffer = new BufferedReader(new InputStreamReader(is, "iso-8859-9")); 

int byteRead; 
while ((byteRead = buffer.read()) != -1) { 
    builder.append((char) byteRead); 
} 
buffer.close(); 
System.out.println(builder.toString()); 
+1

ध्यान दें कि आपको केवल उस स्रोत को प्राप्त होगा जो यूआरएल खोलते समय शुरू में वितरित किया जाता है। AJAX के माध्यम से अतिरिक्त सामग्री लोड की जा सकती है और जब आप प्रारंभिक स्ट्रीम को पढ़ते हैं तो आप उस सामग्री को नहीं देख पाएंगे। - उदाहरण के तौर पर, फ़ायरफ़ॉक्स में http://demo.vaadin.com/sampler खोलें और फिर पृष्ठ स्रोत कोड खोलें। आपको वहां प्रदर्शित सभी सामग्री के लिए स्रोत नहीं दिखाई देगा। – Thomas

+0

@cerq: * "वेब पेज के स्रोत कोड" की आपकी परिभाषा के आधार पर * आप कर सकते हैं या आप इसे नहीं कर सकते हैं। उदाहरण के लिए यह तर्क दिया जा सकता है कि "स्रोत कोड" का कहना है कि * .jsp * द्वारा उत्पन्न एक वेबपृष्ठ * .jsp * फ़ाइल है और ** ** उत्पन्न नहीं हुआ HTML ... आप क्या कर रहे हैं एचटीएमएल है, न कि "स्रोत कोड"। कई मामलों में "स्रोत कोड" सर्वर पर होता है और सर्वर को पायरेट करने से कम आप बस इसे एक्सेस नहीं कर सकते हैं। – TacticalCoder

+0

@ थॉमस मुझे लगता है कि मेरी समस्या उन चीजों के बारे में है जो आप बताते हैं। तो क्या सभी प्रदर्शित सामग्री स्रोत प्राप्त करने का कोई तरीका है? – brtb

उत्तर

22

एक अतिरिक्त अनुरोध संपत्ति के साथ निम्नलिखित कोड का प्रयास करें:

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.net.URL; 
import java.net.URLConnection; 

public class SocketConnection 
{ 
    public static String getURLSource(String url) throws IOException 
    { 
     URL urlObject = new URL(url); 
     URLConnection urlConnection = urlObject.openConnection(); 
     urlConnection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11"); 

     return toString(urlConnection.getInputStream()); 
    } 

    private static String toString(InputStream inputStream) throws IOException 
    { 
     try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"))) 
     { 
      String inputLine; 
      StringBuilder stringBuilder = new StringBuilder(); 
      while ((inputLine = bufferedReader.readLine()) != null) 
      { 
       stringBuilder.append(inputLine); 
      } 

      return stringBuilder.toString(); 
     } 
    } 
} 
+0

न तो आपका कोड और न ही मैंने जो कोड लिखा है वह लिंक http://www.cumhuriyet.com.tr?hn=298710 कृपया पहले अपना कोड जांचें। – brtb

+2

System.out.println (getUrlSource ("http://cumhuriyet.com.tr/?hn=298710")); यह ठीक है –

1
URL yahoo = new URL("http://www.yahoo.com/"); 
BufferedReader in = new BufferedReader(
      new InputStreamReader(
      yahoo.openStream())); 

String inputLine; 

while ((inputLine = in.readLine()) != null) 
    System.out.println(inputLine); 

in.close(); 
+0

मुझे एक कोड नहीं चाहिए जो yahoo.com या google.com के लिए काम करता है कृपया मेरी पोस्ट दो बार जांचें – brtb

3

मुझे यकीन है कि आप पिछले 2 वर्षों में एक समाधान कहीं पाया है हूँ, लेकिन निम्नलिखित एक समाधान है कि काम करता है आपकी अनुरोधित साइट

package javasandbox; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.net.HttpURLConnection; 
import java.net.MalformedURLException; 
import java.net.URL; 

/** 
* 
* @author Ryan.Oglesby 
*/ 
public class JavaSandbox { 

private static String sURL; 

/** 
* @param args the command line arguments 
*/ 
public static void main(String[] args) throws MalformedURLException, IOException { 
    sURL = "http://www.cumhuriyet.com.tr/?hn=298710"; 
    System.out.println(sURL); 
    URL url = new URL(sURL); 
    HttpURLConnection httpCon = (HttpURLConnection) url.openConnection(); 
    //set http request headers 
      httpCon.addRequestProperty("Host", "www.cumhuriyet.com.tr"); 
      httpCon.addRequestProperty("Connection", "keep-alive"); 
      httpCon.addRequestProperty("Cache-Control", "max-age=0"); 
      httpCon.addRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"); 
      httpCon.addRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36"); 
      httpCon.addRequestProperty("Accept-Encoding", "gzip,deflate,sdch"); 
      httpCon.addRequestProperty("Accept-Language", "en-US,en;q=0.8"); 
      //httpCon.addRequestProperty("Cookie", "JSESSIONID=EC0F373FCC023CD3B8B9C1E2E2F7606C; lang=tr; __utma=169322547.1217782332.1386173665.1386173665.1386173665.1; __utmb=169322547.1.10.1386173665; __utmc=169322547; __utmz=169322547.1386173665.1.1.utmcsr=stackoverflow.com|utmccn=(referral)|utmcmd=referral|utmcct=/questions/8616781/how-to-get-a-web-pages-source-code-from-java; __gads=ID=3ab4e50d8713e391:T=1386173664:S=ALNI_Mb8N_wW0xS_wRa68vhR0gTRl8MwFA; scrElm=body"); 
      HttpURLConnection.setFollowRedirects(false); 
      httpCon.setInstanceFollowRedirects(false); 
      httpCon.setDoOutput(true); 
      httpCon.setUseCaches(true); 

      httpCon.setRequestMethod("GET"); 

      BufferedReader in = new BufferedReader(new InputStreamReader(httpCon.getInputStream(), "UTF-8")); 
      String inputLine; 
      StringBuilder a = new StringBuilder(); 
      while ((inputLine = in.readLine()) != null) 
       a.append(inputLine); 
      in.close(); 

      System.out.println(a.toString()); 

      httpCon.disconnect(); 
} 
} 
+0

एक सहायता कभी देर नहीं हुई है। लेकिन मैंने आपके कोड की कोशिश की और यह कई वेबपृष्ठों में काम नहीं करता है। –

+1

मैं मानता हूं कि यह सेगमेंट सभी वेब पृष्ठों के खिलाफ काम नहीं करेगा क्योंकि अलग-अलग पेज अलग-अलग प्रारूपों में डेटा लौटाते हैं और कुछ मामलों में रीडायरेक्ट की आवश्यकता हो सकती है जो आप पूरा करना चाहते हैं। कुछ मामलों में आप प्रतिक्रिया को जीजीआईपी प्रतिक्रिया के रूप में प्राप्त कर सकते हैं और आप इसे 'इनपुटस्ट्रीम gzippedResponse = httpCon.getInputStream(); इनपुटस्ट्रीम ungzippedResponse = नया GZIPInputStream (gzippedResponse); इनपुटस्ट्रीम रीडर रीडर = नया इनपुटस्ट्रीम रीडर (ungzippedResponse, "UTF-8"); स्ट्रिंगवाइटर लेखक = नया स्ट्रिंगवाइटर(); ' – Roglesby