উত্তর:
জাভা ইউআরএল ক্লাস ব্যবহার করে এখানে কিছু পরীক্ষিত কোড দেওয়া আছে । যদিও আমি এখানে ব্যতিক্রমগুলি পরিচালনা করতে বা কল স্ট্যাকটি পাস করার চেয়ে ভাল কাজ করার পরামর্শ দিই।
public static void main(String[] args) {
URL url;
InputStream is = null;
BufferedReader br;
String line;
try {
url = new URL("http://stackoverflow.com/");
is = url.openStream(); // throws an IOException
br = new BufferedReader(new InputStreamReader(is));
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (MalformedURLException mue) {
mue.printStackTrace();
} catch (IOException ioe) {
ioe.printStackTrace();
} finally {
try {
if (is != null) is.close();
} catch (IOException ioe) {
// nothing to see here
}
}
}
DataInputStream
করুন BufferedReader
। এবং প্রতিস্থাপন "dis = new DataInputStream(new BufferedInputStream(is));"
করুন"dis = new BufferedReader(new InputStreamReader(is));"
InputStreamReader
?
আমি জসুপের মতো একটি শালীন HTML পার্সার ব্যবহার করব । এটি এতটা সহজ:
String html = Jsoup.connect("http://stackoverflow.com").get().html();
এটি GZIP পরিচালনা করে এবং সম্পূর্ণ প্রতিক্রিয়া এবং চরিত্রের এনকোডিং সম্পূর্ণ স্বচ্ছভাবে করে। এটি আরও সুবিধা দেয় যেমন এইচটিএমএল ট্র্যাভার্সিং এবং সিএসএস নির্বাচকরা যেমন jQuery করতে পারে তেমন ম্যানিপুলেশন । আপনাকে কেবল এটি হিসাবে ধরতে হবে Document
, একটি হিসাবে নয় String
।
Document document = Jsoup.connect("http://google.com").get();
আপনি সত্যিই না মৌলিক স্ট্রিং পদ্ধতি চালানো বা এমনকি এটি প্রক্রিয়া এইচটিএমএল উপর Regex করতে চাই।
;)
NetworkOnMainThreadException
বিলের উত্তরটি খুব ভাল তবে আপনি অনুরোধের মতো সংক্ষেপণ বা ব্যবহারকারী-এজেন্টগুলির সাথে কিছু কাজ করতে চাইতে পারেন। নিম্নলিখিত কোডগুলি দেখায় যে কীভাবে আপনি আপনার অনুরোধগুলিতে বিভিন্ন ধরণের সংক্ষেপণ করতে পারেন।
URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection) url.openConnection(); // Cast shouldn't fail
HttpURLConnection.setFollowRedirects(true);
// allow both GZip and Deflate (ZLib) encodings
conn.setRequestProperty("Accept-Encoding", "gzip, deflate");
String encoding = conn.getContentEncoding();
InputStream inStr = null;
// create the appropriate stream wrapper based on
// the encoding type
if (encoding != null && encoding.equalsIgnoreCase("gzip")) {
inStr = new GZIPInputStream(conn.getInputStream());
} else if (encoding != null && encoding.equalsIgnoreCase("deflate")) {
inStr = new InflaterInputStream(conn.getInputStream(),
new Inflater(true));
} else {
inStr = conn.getInputStream();
}
ব্যবহারকারী-এজেন্টকেও সেট করতে নিম্নলিখিত কোড যুক্ত করুন:
conn.setRequestProperty ( "User-agent", "my agent name");
ঠিক আছে, আপনি বিল্ট-ইন লাইব্রেরি যেমন URL এবং URL সংযোগের সাথে যেতে পারেন , তবে তারা খুব বেশি নিয়ন্ত্রণ দেয় না।
ব্যক্তিগতভাবে আমি অ্যাপাচি এইচটিটিপি ক্লায়েন্ট লাইব্রেরির সাথে যেতে চাই ।
সম্পাদনা করুন: HTTPClient আপাচে জীবনের শেষের দিকে সেট করেছে to প্রতিস্থাপনটি হ'ল: এইচটিটিপি উপাদান
উপরে উল্লিখিত সমস্ত পন্থাগুলি ব্রাউজারে দেখতে দেখতে ওয়েব পৃষ্ঠার পাঠ্যটি ডাউনলোড করে না। আজকাল এইচটিএমএল পৃষ্ঠাগুলিতে স্ক্রিপ্টগুলির মাধ্যমে ব্রাউজারগুলিতে প্রচুর ডেটা লোড হয়। উল্লিখিত কোনও কৌশলই স্ক্রিপ্ট সমর্থন করে না, তারা কেবলমাত্র এইচটিএমএল পাঠ্য ডাউনলোড করে। এইচটিএমএলআইএনটি জাভাস্ক্রিপ্টগুলি সমর্থন করে। তাই আপনি যেমন ব্রাউজারে দেখায় ওয়েবপৃষ্ঠাটি টেক্সট ডাউনলোড করতে খুঁজছি হয় তাহলে ব্যবহার করা উচিত HTMLUNIT ।
আপনাকে সম্ভবত কোনও সুরক্ষিত ওয়েব পৃষ্ঠা (https প্রোটোকল) থেকে কোডটি বের করতে হবে। নিম্নলিখিত উদাহরণে, এইচটিএমএল ফাইলটি c: \ temp \ filename.html এ সংরক্ষণ করা হচ্ছে উপভোগ করুন!
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import javax.net.ssl.HttpsURLConnection;
/**
* <b>Get the Html source from the secure url </b>
*/
public class HttpsClientUtil {
public static void main(String[] args) throws Exception {
String httpsURL = "https://stackoverflow.com";
String FILENAME = "c:\\temp\\filename.html";
BufferedWriter bw = new BufferedWriter(new FileWriter(FILENAME));
URL myurl = new URL(httpsURL);
HttpsURLConnection con = (HttpsURLConnection) myurl.openConnection();
con.setRequestProperty ( "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:63.0) Gecko/20100101 Firefox/63.0" );
InputStream ins = con.getInputStream();
InputStreamReader isr = new InputStreamReader(ins, "Windows-1252");
BufferedReader in = new BufferedReader(isr);
String inputLine;
// Write each line into the file
while ((inputLine = in.readLine()) != null) {
System.out.println(inputLine);
bw.write(inputLine);
}
in.close();
bw.close();
}
}
ইউনিক্স / লিনাক্স বাক্সে আপনি কেবল 'উইজেট' চালাতে পারেন তবে আপনি যদি ক্রস প্ল্যাটফর্ম ক্লায়েন্ট লিখছেন তবে এটি সত্যিই কোনও বিকল্প নয়। অবশ্যই এটি ধরে নিয়েছে যে আপনি যে ডেটা ডাউনলোড করেন সেটি ডাউনলোড করার পয়েন্ট এবং এটি ডিস্কের সাথে আঘাত করার মধ্যে আপনি খুব বেশি কিছু করতে চান না।
জেটির একটি এইচটিটিপি ক্লায়েন্ট রয়েছে যা ওয়েব পৃষ্ঠা ডাউনলোড করতে ব্যবহার করা যেতে পারে।
package com.zetcode;
import org.eclipse.jetty.client.HttpClient;
import org.eclipse.jetty.client.api.ContentResponse;
public class ReadWebPageEx5 {
public static void main(String[] args) throws Exception {
HttpClient client = null;
try {
client = new HttpClient();
client.start();
String url = "http://www.something.com";
ContentResponse res = client.GET(url);
System.out.println(res.getContentAsString());
} finally {
if (client != null) {
client.stop();
}
}
}
}
উদাহরণটি একটি সাধারণ ওয়েব পৃষ্ঠার বিষয়বস্তু মুদ্রণ করে।
একটি জাভা একটি ওয়েব পেজ পড়া টিউটোরিয়াল আমি জাভা programmaticaly একটি ওয়েব পেজ dowloading URL- এ JSoup, HtmlCleaner, এ্যাপাচি HttpClient, জেটি HttpClient এবং HtmlUnit ব্যবহারের ছয় উদাহরণ লিখেছেন।
এই শ্রেণিটি থেকে সহায়তা পান এটি কোড পান এবং কিছু তথ্য ফিল্টার করুন।
public class MainActivity extends AppCompatActivity {
EditText url;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate( savedInstanceState );
setContentView( R.layout.activity_main );
url = ((EditText)findViewById( R.id.editText));
DownloadCode obj = new DownloadCode();
try {
String des=" ";
String tag1= "<div class=\"description\">";
String l = obj.execute( "http://www.nu.edu.pk/Campus/Chiniot-Faisalabad/Faculty" ).get();
url.setText( l );
url.setText( " " );
String[] t1 = l.split(tag1);
String[] t2 = t1[0].split( "</div>" );
url.setText( t2[0] );
}
catch (Exception e)
{
Toast.makeText( this,e.toString(),Toast.LENGTH_SHORT ).show();
}
}
// input, extrafunctionrunparallel, output
class DownloadCode extends AsyncTask<String,Void,String>
{
@Override
protected String doInBackground(String... WebAddress) // string of webAddress separate by ','
{
String htmlcontent = " ";
try {
URL url = new URL( WebAddress[0] );
HttpURLConnection c = (HttpURLConnection) url.openConnection();
c.connect();
InputStream input = c.getInputStream();
int data;
InputStreamReader reader = new InputStreamReader( input );
data = reader.read();
while (data != -1)
{
char content = (char) data;
htmlcontent+=content;
data = reader.read();
}
}
catch (Exception e)
{
Log.i("Status : ",e.toString());
}
return htmlcontent;
}
}
}
আমি এই পোস্টের ( ইউআরএল ) আসল উত্তরটি ব্যবহার করেছি এবং একটি ফাইলে আউটপুট লিখছি।
package test;
import java.net.*;
import java.io.*;
public class PDFTest {
public static void main(String[] args) throws Exception {
try {
URL oracle = new URL("http://www.fetagracollege.org");
BufferedReader in = new BufferedReader(new InputStreamReader(oracle.openStream()));
String fileName = "D:\\a_01\\output.txt";
PrintWriter writer = new PrintWriter(fileName, "UTF-8");
OutputStream outputStream = new FileOutputStream(fileName);
String inputLine;
while ((inputLine = in.readLine()) != null) {
System.out.println(inputLine);
writer.println(inputLine);
}
in.close();
} catch(Exception e) {
}
}
}