如何使用URLConnection登录对话框?

时间:2016-11-02 19:01:13

标签: java android cookies login urlconnection

目前我有一个应该连接到WebAPI(uTorrent)的应用程序。

但是,当我尝试访问该网站时,我必须登录。

在我的浏览器中看起来像这样

https://gyazo.com/cfb535c4ca1d7db2b16f1c14e3b8e9e6

如何登录此对话框?用户名:密码@ url似乎无法正常工作。

有没有办法使用Http Headers登录?这是我的方法,我应该登录并获取cookie。然而,这并没有让我登录。

  public String getCookie(String url, String post_data, int len) {
     System.out.println();
     URL addr = null;
     try {
         addr = new URL(url);
     } catch (MalformedURLException e) {
         return "Malformed URL";
     }
     StringBuffer data = new StringBuffer();
     HttpURLConnection conn = null;
     try {
         conn = (HttpURLConnection) addr.openConnection();
     } catch (IOException e) {
         return "Open connection error";
     }
     conn.setRequestProperty("Connection", "keep-alive");
     conn.setRequestProperty("Accept-Language", "ru,en-GB;q=0.8,en;q=0.6");
     conn.setRequestProperty("Accept-Charset", "utf-8");
     conn.setRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
     conn.setRequestProperty("Cookie", "");
     conn.setDoOutput(true);
     conn.setDoInput(true);
     //conn.setInstanceFollowRedirects(true);
     for (int i = 0; conn.getHeaderField(i) != null; i++) {
         if(conn.getHeaderFieldKey(i).equals("Set-Cookie")) {
             cookie = conn.getHeaderField(i);
             System.out.println(conn.getHeaderFieldKey(i));
             System.out.println("COOKIE" + conn.getHeaderField(i));
         }
     }
     System.out.println("COOKIE HEADERS" + conn.getHeaderFields());
     return cookie;
 }

这就是我所说的:

readWebsite.getCookie( “http://192.168.1.5:8080/gui/token.html”, “UNAME =登录&安培; PW =密码”,1000);

整个方法对我来说看起来很奇怪,它绝对不符合我的意图,但这是我在这里找到的唯一的东西。

问题是uTorrent的官方WebAPI根本没有提到如何解决这个问题。

我想补充一点,我收到“401错误” - >来自服务器的unathorized。

1 个答案:

答案 0 :(得分:0)

我早就找到了一个有效的答案,但我无法保证任何网络安全。您需要添加“授权”标题。

    String authorization = "Basic " + new  String(android.util.Base64.encode((auth).getBytes(), android.util.Base64.NO_WRAP));

    connection.setRequestProperty("Authorization", authorization);