Jsoup 소켓 타임아웃예외: 읽기 시간이 초과되었습니다.
저는...SocketTimeoutException
Jsoup을 사용하여 많은 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.Connection
30초입니다
이미 언급했듯이, 이것은 다음과 같이 설정할 수 있습니다.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
'source' 카테고리의 다른 글
조인 없이 여러 테이블에서 선택하시겠습니까? (0) | 2022.09.13 |
---|---|
PHP7의 개체 배열을 암시하는 함수 반환 형식 (0) | 2022.09.13 |
SQL varchar 열 길이에 대한 모범 사례 (0) | 2022.09.13 |
Mac OS X의 MySQL 설치 위치 알아보기 (0) | 2022.09.13 |
MySQL Workbench가 mysql.proc를 로드할 수 없습니다. (0) | 2022.09.13 |