如何在路由器地址上使用jsoup?

时间:2015-06-20 23:43:54

标签: java html parsing jsoup

我有关于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)

首先我认为问题与" ussername和密码"有关。所以我将地址192.168.1.1更改为Username:Password@192.168.1.1

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

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

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

2 个答案:

答案 0 :(得分:0)

与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转换。)

答案 1 :(得分:0)

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

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

@Override
public void onClick(View v) {
    switch (v.getId()){
        case R.id.store:
            if(visible){
                if(!storeVisible){
                    Log.e("MSG", "If !storeVisible called");
                    if(settingsVisible){
                        setViewGone(settingsLayout);
                        settingsVisible = false;
                        setViewVisible(storeLayout);
                        storeVisible = true;
                    Log.e("MSG", "If !storeVisible and settingsVisible called");
                        return;
                    } else {
                        setViewVisible(storeLayout);
                        storeVisible = true;
                    Log.e("MSG", "If !storeVisible and else called");
                        return;
                    }
                } else if (storeVisible) {
                    settingsLayout.setVisibility(View.GONE);
                    setViewGone(storeLayout);
                    storeVisible = false;
                    Log.e("MSG", "else if storeVisible called");
                    return;
                }
            } else {
                store.setClickable(false);
                    Log.e("MSG", "else clickable called");
            }
            break;
        case R.id.settings:
            if(visible){
                if(!settingsVisible){
                    Log.e("MSG", "If !settingsVisible called");
                    if(storeVisible){
                        setViewGone(storeLayout);
                        storeVisible = false;
                        setViewVisible(settingsLayout);
                        settingsVisible = true;
                    Log.e("MSG", "If !settingsVisible and storeVisible called");
                        return;
                    } else {
                        setViewVisible(settingsLayout);
                        settingsVisible = true;
                    Log.e("MSG", "If !settingsVisible and else called");
                        return;
                    }
                } else if (settingsVisible) {
                    storeLayout.setVisibility(View.GONE);
                    setViewGone(settingsLayout);
                    settingsVisible = false;
                    Log.e("MSG", "else if settingsVisible called");
                    return;
                }
            } else {
                settings.setClickable(false);
                    Log.e("MSG", "else clickable called");
            }
            break;
    }
}

public void setViewVisible(View view){
    view.setVisibility(View.VISIBLE);
    view.startAnimation(expandTop);
}

public void setViewGone(View view){
    view.setVisibility(View.GONE);
    view.startAnimation(retractTop);
}

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

并使用此方法阅读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();

inputstream

来自:Read/convert an InputStream to a String

然后我用Jsoup解析StringWriter writer = new StringWriter(); IOUtils.copy(inputStream, writer); String theString = writer.toString();