【问题标题】:Exception in thread "main" java.net.SocketTimeoutException: Read timed out in jsoup线程“主”java.net.SocketTimeoutException 中的异常:jsoup 中读取超时
【发布时间】:2016-09-10 00:57:57
【问题描述】:

我可以手动访问 this link 并使用 firefox 浏览器正确搜索,但我无法使用 JSOUP 连接。

代码:

String url = "https://www.sosnc.gov/trademrk/search.aspx";
Connection.Response response = Jsoup.connect(url).timeout(45000)
            .method(Connection.Method.GET)
            .ignoreContentType(true)
            .userAgent("Mozilla/5.0 (Windows NT 6.3; rv:40.0) Gecko/20100101 Firefox/40.0")  
            .followRedirects(true)
            .execute();
Map<String, String> loginCookies = response.cookies();
Document document = response.parse(); //search results
Element __VIEWSTATE = document.select("input[name=__VIEWSTATE]").first();
Element __VIEWSTATEGENERATOR = document.select("input[name=__VIEWSTATEGENERATOR]").first();
Element __PREVIOUSPAGE = document.select("input[name=__PREVIOUSPAGE]").first();
Element __EVENTVALIDATION = document.select("input[name=__EVENTVALIDATION]").first();
response = Jsoup.connect(url).timeout(45000)
            .data("SosMenu_SiteTreeView_ExpandState", "ennnnnnnnnnnn")
            .data("SosMenu_SiteTreeView_PopulateLog", "")
            .data("SosMenu_SiteTreeView_SelectedNode", "SosMenu_SiteTreeViewn2")
            .data("ToolsTreeView_ExpandState", "ennn")
            .data("ToolsTreeView_PopulateLog", "")
            .data("ToolsTreeView_SelectedNode", "")
            .data("__EVENTARGUMENT", "")
            .data("__EVENTTARGET", "")
            .data("__EVENTVALIDATION", __EVENTVALIDATION.val())
            .data("__PREVIOUSPAGE", __PREVIOUSPAGE.val())
            .data("__VIEWSTATE", __VIEWSTATE.val())
            .data("__VIEWSTATEGENERATOR", __VIEWSTATEGENERATOR.val())
            .data("ctl00$ctl00$SosContent$SosContent$Submit1", "Search")
            .data("ctl00$ctl00$SosContent$SosContent$Type", "Goods")
            .data("ctl00$ctl00$SosContent$SosContent$txtSearc", query)
            .cookies(loginCookies)
            .method(Connection.Method.POST)
            .ignoreContentType(true)
            .userAgent("Mozilla/5.0 (Windows NT 6.3; rv:40.0) Gecko/20100101 Firefox/40.0")  
            .header("host", "www.sosnc.gov")
            .referrer("https://www.sosnc.gov/trademrk/search.aspx")  
            .followRedirects(true)
            .execute();
    document = response.parse(); //search results
    System.out.println(document);

我错过了什么吗?是对服务器的Jsoup post请求,所以我也加了Cookies和需要的参数,但是还是没有得到结果。

【问题讨论】:

  • 您有任何调试日志或异常消息吗?你可以检查响应对象吗?里面有什么?
  • 异常是标题Read timed out... 并没有响应,因为它直接抛出异常
  • 你试过用 http 代替 https 吗?
  • 试过但结果相同

标签: java web-scraping jsoup


【解决方案1】:

我不知道您为什么会超时,但您可以通过更简单的方式轻松获取数据 -

String query = "abc";
String url = "https://www.sosnc.gov/trademrk/results.aspx?searchstr=" +
              query +
             "&Type=GOODS";
Connection.Response response = Jsoup.connect(url).timeout(45000)
            .method(Connection.Method.GET)
            .ignoreContentType(true)
            .userAgent("Mozilla/5.0 (Windows NT 6.3; rv:40.0) Gecko/20100101 Firefox/40.0")

            .followRedirects(true)
            .execute();
System.out.println(response.body());

不需要 cookie 或额外的参数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-15
    • 2020-05-09
    • 2011-01-29
    • 2011-07-13
    • 1970-01-01
    相关资源
    最近更新 更多