source

Jsoup 소켓 타임아웃예외: 읽기 시간이 초과되었습니다.

gigabyte 2022. 9. 13. 22:07
반응형

Jsoup 소켓 타임아웃예외: 읽기 시간이 초과되었습니다.

저는...SocketTimeoutExceptionJsoup을 사용하여 많은 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>

각 링크에 대해 URL에 링크된 문서를 해석하여(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("...").timeout(10 * 1000).get(); 

타임아웃을 10초로 설정합니다.

OK - MarcoS의 답변에 대한 편집으로 제공하려고 했지만 편집이 거부되었습니다.그럼에도 불구하고 다음 정보는 향후 방문자에게 유용할 수 있습니다.

javadocs에 따르면 기본 타임아웃은org.jsoup.Connection30초입니다

이미 언급했듯이, 이것은 다음과 같이 설정할 수 있습니다.timeout(int millis)

또한 편집 시 OP 노트로 이 설정을 할 수도 있습니다.timeout(0)단, javadocs의 스테이트는 다음과 같습니다.

타임아웃이 0이면 무제한 타임아웃으로 취급됩니다.

같은 에러가 발생했습니다.

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 클래스의 메서드를 사용하여 Jsoup 사용자 에이전트를 설정했습니다.

예를 들어 다음과 같습니다.

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

https://jsoup.org/apidocs/org/jsoup/Connection.html에 오류가 있습니다.기본 타임아웃은 30초가 아닙니다.3초입니다.코드명 javadoc을 보세요.3000밀리초라고 되어 있어요.

이 조작은 유효합니다.Jsoup.connect(url.toLowerCase()).timeout(0);.

jsoup에서 연결하는 동안 시간 초과를 설정합니다.

언급URL : https://stackoverflow.com/questions/6571548/jsoup-sockettimeoutexception-read-timed-out

반응형