我通过传递会话ID和url访问网页,输出是HTML响应。 我想使用jSoup来解析此响应并获取标记元素。 我看到Jsoup中的示例采用String来建立连接。我该怎么做。
伪代码:
我尝试了上面的方法并得到了这个异常
java.io.IOException: 401 error loading URL http://www.abc.com/index
at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:387)
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)
基本上entity.getContent()
有HTML响应,必须作为String传递给connect方法。但它不起作用。
答案 0 :(得分:1)
Apache Commons HttpClient和Jsoup不共享同一个cookie商店。您基本上需要传递与HttpClient通过Jsoup的Connection
检索回来相同的cookie。你可以在这里找到一些具体的例子:
或者,您也可以继续使用HttpClient来触发HTTP请求并维护Cookie,而是将HttpResponse
作为String
通过Jsoup#parse()
提供。
所以这应该做:
HttpResponse httpResponse = httpclient1.execute(httpget, httpContext);
String html = EntityUtils.toString(httpResponse.getEntity());
Document doc = Jsoup.parse(html, testUrl);
// ...
顺便说一句,您不一定需要为后续请求创建全新的HttpClient
。只需重复使用已创建的httpclient
即可。您获取String
响应的方式也很笨拙。上例中的第二行显示了如何在最简单的情况下执行此操作。
答案 1 :(得分:0)
显示http错误401,表示
Similar to 403 Forbidden, but specifically for use when authentication is possible but has failed or not yet been provided
。
因此,我认为您需要使用您的Java代码登录网站,或通过代码发送cookie来表明身份。