আমি জসপে একটি সকেটটাইমআউটপ্লেশন পেয়েছি: পড়ার সময়সীমা শেষ


100


আমি যখন জসুপ ব্যবহার করে অনেকগুলি HTML নথি পার্স করার চেষ্টা করি তখন আমি সকেটটাইমআউটপ্লেশন পেয়েছি।
উদাহরণস্বরূপ, আমি লিঙ্কগুলির একটি তালিকা পেয়েছি:

<a href="www.domain.com/url1.html">link1</a>
<a href="www.domain.com/url2.html">link2</a>
<a href="www.domain.com/url3.html">link3</a>
<a href="www.domain.com/url4.html">link4</a>

প্রতিটি লিঙ্কের জন্য, আমি এই পৃষ্ঠাগুলিতে অন্যান্য টুকরা তথ্য পেতে ইউআরএল (href অ্যাট্রিবিউট থেকে) এর সাথে লিঙ্কিত নথিটি বিশ্লেষণ করি।
সুতরাং আমি ভাবতে পারি যে এটি অনেক সময় নেয় তবে এই ব্যতিক্রমটি কীভাবে বন্ধ করবেন?
পুরো স্ট্যাক ট্রেস এখানে:

java.net.SocketTimeoutException: Read timed out
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.read(Unknown Source)
    at java.io.BufferedInputStream.fill(Unknown Source)
    at java.io.BufferedInputStream.read1(Unknown Source)
    at java.io.BufferedInputStream.read(Unknown Source)
    at sun.net.www.http.HttpClient.parseHTTPHeader(Unknown Source)
    at sun.net.www.http.HttpClient.parseHTTP(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
    at java.net.HttpURLConnection.getResponseCode(Unknown Source)
    at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:381)
    at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:364)
    at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:143)
    at org.jsoup.helper.HttpConnection.get(HttpConnection.java:132)
    at app.ForumCrawler.crawl(ForumCrawler.java:50)
    at Main.main(Main.java:15)

ধন্যবাদ বন্ধুরা!

সম্পাদনা: হুম ... দুঃখিত, সবেমাত্র সমাধানটি খুঁজে পেয়েছি:

Jsoup.connect(url).timeout(0).get();

আশা করি এটি অন্য কারও পক্ষে কার্যকর হতে পারে ... :)


3
আপনার সম্পাদনায় আপনি যে কোডটি যুক্ত করেছেন তা সময়সীমা অসীমকে সেট করে। বেশিরভাগ ব্যবহারের ক্ষেত্রে এটি অনাকাঙ্ক্ষিত। সময়সীমা দীর্ঘ থাকলেও মার্কোএস উত্তরে বর্ণিত নির্দিষ্ট সময়সীমা ব্যবহার করা আরও ভাল।
স্টেপানিয়ান

2
আমার ধারণা, timeout(0)জসোপ এটি সংযুক্ত না হওয়া পর্যন্ত বার বার ইউআরএলকে সংযুক্ত করবে।
ইভান হু

উত্তর:


138

আমি মনে করি আপনি করতে পারেন

Jsoup.connect("...").timeout(10 * 1000).get(); 

যা 10 এর সময়সীমা নির্ধারণ করে।


3
121 upvotes কিন্তু কেন এই সমস্যার সমাধান করে তার কোন ব্যাখ্যা নেই? ডিফল্ট হয়ে যাওয়ার পরে কেন সেই সমস্যাটি দেখাবে না, এটি 30 সেকেন্ড পরে উপস্থিত হবে?
অ্যালান হেই

2
@ অ্যালানহে আমার উত্তরটি সময়সীমা নির্ধারণ করে সমস্যাটি সমাধান করার পরামর্শ
দিচ্ছিল

26

ঠিক আছে - তাই, আমি এটি মার্কোসের উত্তরের সম্পাদনা হিসাবে প্রস্তাব দেওয়ার চেষ্টা করেছি, তবে সম্পাদনাটি প্রত্যাখ্যান করা হয়েছিল। তবুও, নিম্নলিখিত তথ্যগুলি ভবিষ্যতের দর্শকদের জন্য কার্যকর হতে পারে:

মতে javadocs , ডিফল্ট সময়সীমার একটি জন্য org.jsoup.Connection30 সেকেন্ড।

যেমন ইতিমধ্যে উল্লেখ করা হয়েছে, এটি ব্যবহার করে সেট করা যেতে পারে timeout(int millis)

এছাড়াও, সম্পাদনায় ওপি নোট হিসাবে, এটি ব্যবহার করেও সেট করা যেতে পারে timeout(0)। তবে জাভাদোকস রাষ্ট্র হিসাবে:

শূন্যের একটি সময়সীমা অসীম সময়সীমা হিসাবে বিবেচিত হয়।


3
অসীম সময়সীমা নির্ধারণ করা বেশিরভাগ ক্ষেত্রে একটি খারাপ ধারণা। দীর্ঘ সময়সীমা ব্যবহার করুন, তবে সর্বদা একটি নির্দিষ্ট করুন। মার্কোস উত্তর দেখুন।
স্টেপানিয়ান

3
@ স্টেপিয়ানিয়ান - স্পষ্টতই, আমি একটি অসীম সময়সীমা নির্ধারণের পক্ষে পরামর্শ দিচ্ছি না। এটি ওপি কর্তৃক সমাধান হিসাবে প্রস্তাব করা হয়েছিল, যদিও আমি ভবিষ্যতের ব্যবহারকারীদের এটির প্রভাবের দিকে পরিচালিত করতে চেয়েছিলাম। প্রকৃতপক্ষে, আমি যখন আমার 'উত্তর' পোস্ট করেছি, আমি ইঙ্গিত দিয়েছিলাম যে আমি ভেবেছিলাম এটি ম্যাক্রোসের উত্তরের একটি সম্পাদনা হওয়া উচিত ছিল, কারণ কিছু অতিরিক্ত তথ্য যা ভবিষ্যতের ব্যবহারকারীদের জন্য দরকারী হতে পারে ... তবে সম্পাদনাটি প্রত্যাখ্যান করা হয়েছিল।
শ্রদ্ধা জানানো

ডিফল্ট সময়সীমার 3 সেকেন্ডের কিন্তু 30 সেকেন্ড (30000 Millis) না হয়, আপনি এটা দেখতে পারেন jsoup.org/apidocs/org/jsoup/Connection.html
aldok

3

Https://jsoup.org/apidocs/org/jsoup/Connection.html এ ভুল রয়েছে । ডিফল্ট সময়সীমা 30 সেকেন্ড নয়। এটি 3 সেকেন্ড। কোডগুলিতে কেবল জাভাদোকটি দেখুন। এটি 3000 এমএস বলে।


1
জাভা ডকটিতে: "ডিফল্ট সময়সীমা 30 সেকেন্ড (30,000 মিলিস) হয় zero শূন্যের একটি সময়সীমা অসীম সময়সীমা হিসাবে বিবেচিত হয়।" jsoup.org/apidocs/org/jsoup/Connication.html
জেটন

3

আমারও একই ত্রুটি ছিল:

java.net.SocketTimeoutException: Read timed out
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
    at java.net.SocketInputStream.read(SocketInputStream.java:171)
    at java.net.SocketInputStream.read(SocketInputStream.java:141)

এবং শুধুমাত্র সেটিং .userAgent(Opera)আমার পক্ষে কাজ করেছিল।

সুতরাং আমি Connection userAgent(String userAgent)Jsoup ব্যবহারকারী এজেন্ট সেট করতে সংযোগ শ্রেণির পদ্ধতি ব্যবহার করেছি ।

কিছুটা এইরকম:

Jsoup.connect("link").userAgent("Opera").get();


-6

Jsoup থেকে সংযোগের সময়সীমা নির্ধারণ করুন।


2
দয়া করে আপনার উত্তর সম্পর্কে আরও তথ্য যুক্ত করুন
জো তারাস

দয়া করে আপনার উত্তরটি ব্যাখ্যা এবং কোড স্নিপেটের সাথে প্রয়োজনে সমর্থন করুন necessary
স্বপ্নিল বি।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.