【问题标题】:how to use jsoup on router address?如何在路由器地址上使用jsoup?
【发布时间】:2015-06-20 23:43:54
【问题描述】:

我有一个关于 Jsoup 库的问题...

我有这个小程序,它可以下载、解析并获取一个 HTML 页面的标题,即google.com

import java.io.File;
import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;

public class HTMLParser{

   public static void main(String args[]) {


    // JSoup Example - Reading HTML page from URL

    Document doc;
    try {
        doc = Jsoup.connect("http://google.com/").get();
        title = doc.title();
    } catch (IOException e) {
        e.printStackTrace();
    }
    System.out.println("Jsoup Can read HTML page from URL, title : "+title);
  }
}

程序运行良好,但问题是:

当我尝试从 IP 地址192.168.1.1 解析文件时(我将google.com 更改为192.168.1.1,这是路由器的地址):

        doc = Jsoup.connect("http://192.168.1.1/").get();

它不起作用并显示以下错误:

org.jsoup.HttpStatusException: HTTP error fetching URL. Status=401, URL=http://192.168.1.1/
at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:537)
at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:493)
at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:205)
at org.jsoup.helper.HttpConnection.get(HttpConnection.java:194)
at HTMLParser.main(HTMLParser.java:43)

首先我认为问题与“用户名和密码”有关,所以我将地址192.168.1.1 更改为Username:Password@192.168.1.1

        doc = Jsoup.connect("http://username:password@192.168.1.1/").get();

但它不起作用,程序将整行读取为地址。

如果有人有任何想法,请帮助我!谢谢大家

【问题讨论】:

标签: java html parsing jsoup


【解决方案1】:

与 saka1029 一样,您可以请求带有身份验证的 URL。然后使用Jsoup.parse(String) 获取Document 对象。

或者你只是使用 Jsoup 方法发送请求并获得响应:

Getting HTML Source using Jsoup of a password protected website

Jsoup connection with basic access authentication

(我通常使用javax.xml.bind.DatatypeConverter.printBase64Binary进行Base64转换。)

【讨论】:

  • 嗨,@Griddoor! ,我阅读了一些解决方案,但没有人与我合作......在我的情况下,我需要在出现的身份验证中写入用户名和密码。对话窗口或在我提到的网址中过去,所以如果可以的话,请给出一个完整的解决方案!!!并感谢您阅读并回复我的问题。
  • @M.os.i 存在不同类型的身份验证,您可能必须尝试手动登录并捕获http数据包。然后你可以编写程序来做同样的事情。
【解决方案2】:

非常感谢 saka1029;Griddoor。我看了你的建议,很有帮助,

对我来说,我使用这个解决方案:

URL url = new URL("http://user:pass@domain.com/url");
URLConnection urlConnection = url.openConnection();

if (url.getUserInfo() != null) {
    String basicAuth = "Basic " + new String(new Base64().encode   (url.getUserInfo().getBytes()));
    urlConnection.setRequestProperty("Authorization", basicAuth);
}

InputStream inputStream = urlConnection.getInputStream();

来自:Connecting to remote URL which requires authentication using Java

并使用此方法读取inputstream

StringWriter writer = new StringWriter();
IOUtils.copy(inputStream, writer);
String theString = writer.toString();

来自:Read/convert an InputStream to a String

然后我用 Jsoup 解析 theString

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-30
    • 1970-01-01
    • 1970-01-01
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-03
    相关资源
    最近更新 更多