jsoup连接参数

时间:2012-01-11 22:10:45

标签: java httpclient jsoup

我通过传递会话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方法。但它不起作用。

2 个答案:

答案 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来表明身份。