【问题标题】:SocketTimeoutException: failed to connect to myUrl (port 80) after 7000ms - JsoupSocketTimeoutException:在 7000 毫秒后无法连接到 myUrl(端口 80) - Jsoup
【发布时间】:2016-05-11 11:10:16
【问题描述】:

在 Android 中,我有多个线程使用 Jsoup 执行 HTML 解析。
我的连接代码是:

Jsoup.connect(url).userAgent(this.userAgent).timeout(10 * 1000).get();

其中this.userAgent 等于最新的Mozilla 用户代理-"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1"

现在当我指定 10000 毫秒时,我怎么会得到这个参数为 7000 毫秒的 SocketTimeoutException
我还尝试将超时设置为无限timeout(0),但我仍然得到这个Exception

LogCat

05-11 13:49:45.582 11796-12561/com.dl.master.lyrics.lyricsmaster W/System.err: java.net.SocketTimeoutException: failed to connect to www.songlyrics.com/23.252.119.106 (port 80) after 7000ms
05-11 13:49:45.582 11796-12561/com.dl.master.lyrics.lyricsmaster W/System.err:     at libcore.io.IoBridge.connectErrno(IoBridge.java:169)
05-11 13:49:45.583 11796-12561/com.dl.master.lyrics.lyricsmaster W/System.err:     at libcore.io.IoBridge.connect(IoBridge.java:122)
05-11 13:49:45.583 11796-12561/com.dl.master.lyrics.lyricsmaster W/System.err:     at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:183)
05-11 13:49:45.583 11796-12561/com.dl.master.lyrics.lyricsmaster W/System.err:     at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:456)
05-11 13:49:45.583 11796-12561/com.dl.master.lyrics.lyricsmaster W/System.err:     at java.net.Socket.connect(Socket.java:882)
05-11 13:49:45.583 11796-12561/com.dl.master.lyrics.lyricsmaster W/System.err:     at com.android.okhttp.internal.Platform.connectSocket(Platform.java:139)
05-11 13:49:45.583 11796-12561/com.dl.master.lyrics.lyricsmaster W/System.err:     at com.android.okhttp.Connection.connect(Connection.java:148)
05-11 13:49:45.583 11796-12561/com.dl.master.lyrics.lyricsmaster W/System.err:     at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:276)
05-11 13:49:45.583 11796-12561/com.dl.master.lyrics.lyricsmaster W/System.err:     at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:211)
05-11 13:49:45.583 11796-12561/com.dl.master.lyrics.lyricsmaster W/System.err:     at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:373)
05-11 13:49:45.583 11796-12561/com.dl.master.lyrics.lyricsmaster W/System.err:     at com.android.okhttp.internal.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:106)
05-11 13:49:45.583 11796-12561/com.dl.master.lyrics.lyricsmaster W/System.err:     at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:512)
05-11 13:49:45.583 11796-12561/com.dl.master.lyrics.lyricsmaster W/System.err:     at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:493)
05-11 13:49:45.583 11796-12561/com.dl.master.lyrics.lyricsmaster W/System.err:     at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:205)
05-11 13:49:45.583 11796-12561/com.dl.master.lyrics.lyricsmaster W/System.err:     at org.jsoup.helper.HttpConnection.get(HttpConnection.java:194)
05-11 13:49:45.583 11796-12561/com.dl.master.lyrics.lyricsmaster W/System.err:     at com.dl.master.lyrics.lyricsmaster.GetSongLyricsDotComResults.getParsedDocument(GetSongLyricsDotComResults.java:183)
05-11 13:49:45.583 11796-12561/com.dl.master.lyrics.lyricsmaster W/System.err:     at com.dl.master.lyrics.lyricsmaster.GetSongLyricsDotComResults.getSongLyricsDotComResults(GetSongLyricsDotComResults.java:87)
05-11 13:49:45.583 11796-12561/com.dl.master.lyrics.lyricsmaster W/System.err:     at com.dl.master.lyrics.lyricsmaster.GetSongLyricsDotComResults.run(GetSongLyricsDotComResults.java:42)

getParsedDocument() 执行我的Jsoup 连接。

编辑: 留下不匹配的 ms。

即使我将超时设置为无限,为什么我得到这个SocketTimeoutException

编辑#2

不得不说我与Jsoup API 合作了很长时间,并且从未使用过UserAgentTimeout,我决定添加它们。在我将UserAgentTimeout 添加到我的连接方法后,问题开始出现。

【问题讨论】:

  • Jsoup.connect(url)....请告诉url的值。
  • @greenapps 其实我不知道值。有很多值。你是在告诉我Exception 是因为 URL 格式错误而被抛出的?
  • @greenapps 但网址的格式为www.lyricsplanet.com/66.240.174.52
  • 网址应该以 http:// 开头。
  • 重启电脑。休息一下。

标签: android timeout jsoup user-agent socket-timeout-exception


【解决方案1】:

我有多个使用 Jsoup 执行 HTML 解析的线程。
(...)
添加UserAgentTimeout后问题开始出现

根本原因可能不是因为添加了UserAgentTimeout

检查一下

  • 太多线程没有使用相同的 IP 地址同时向服务器发送请求。
  • 每个请求之间有一个“不错”的延迟(2000 毫秒到 5000 毫秒之间是一个好的开始)
  • 请求之间的延迟是随机的
  • 它们不是从运行线程的主机打开的连接太多。

【讨论】:

  • 感谢您的回答,但今天运行该应用程序似乎运行良好,没有任何Exceptions 向我抛出;)。我猜我的电脑出了点问题,昨天我使用的网络关闭了。
  • 虽然以 60 - 60 秒的有限超时运行应用程序会产生 Exception ;(.
【解决方案2】:

我连接的 Wifi 网络没有互联网所以我去这个异常。然后我连接到另一个有互联网的网络然后我得到了服务器的响应。

【讨论】:

    猜你喜欢
    • 2017-07-09
    • 1970-01-01
    • 1970-01-01
    • 2014-11-02
    • 1970-01-01
    • 2018-10-19
    • 2021-10-21
    • 2012-09-17
    • 2013-04-27
    相关资源
    最近更新 更多