С Новым годом! Форум программистов, компьютерный форум, киберфорум
Java: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 16.10.2012
Сообщений: 15

Как подключиться к ведморде utorrent'а и получить ответ

16.10.2012, 23:20. Показов 1270. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер.
Осваиваю Java.
Задача простая: подключиться к ведморде utorrent'а и получить ответ. Требуется basic авторизация. Посмотрел пяток примеров и родил следующий код:
Java
1
2
3
4
      URL url = new URL("http://192.168.1.3:80/gui/token.html");
      URLConnection urlConnection = url.openConnection();
      urlConnection.setRequestProperty("Authorization", "Basic " + DatatypeConverter.printBase64Binary("login:pass".getBytes()));
      InputStream is = url.openStream();
При этом заголовок Authorization в запросе по факту отсутствует. Смотрю сниффером. Какие бы я ни ставил заголовки через setRequestProperty или addRequestProperty, ничего не меняется в запросе.

Где грабли? =(
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.10.2012, 23:20
Ответы с готовыми решениями:

Как получить конечный ответ
Уверен, что таких вопросов было сотни, но не нашел( Какой командой можно получить конечный численный ответ? То, что имеется, во влажении

Как получить ответ от сервера?
Какие есть способы или программа получения кода ответа от сервера?

Как получить ответ от сервера?
Как мне получить ответ от сервера с помощью класса HttpResponseMessage ? если мне надо не только код страницы, но все заголовки,версия...

8
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
17.10.2012, 11:19
Попробуйте использовать java.net.Authenticator.

Java
1
2
3
4
5
6
static class MyAuthenticator extends Authenticator {
    @Override
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication("support", "12345678".toCharArray());
    }
}
И дальше перед соединением -
Java
1
Authenticator.setDefault(new MyAuthenticator());
1
0 / 0 / 0
Регистрация: 16.10.2012
Сообщений: 15
17.10.2012, 23:39  [ТС]
прокатило =)

только класс не статик. Спасибо большое!

Не по теме:

Тем не менее, я всё равно не понимаю, почему setRequestProperty() не попадает в запрос. Даже с другими заголовками, даже вымышленными...



Добавлено через 2 часа 20 минут
бяда =)
получается я и куку не могу выставить, ни какой либо другой заголовок... Я надеялся сделать всё навтивными средствами, видимо придётся попробовать Httpclient апачевский или ещё чего...
0
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
18.10.2012, 12:56
А вот это странно. Покажите, как делаете? Там тонкости есть.
0
0 / 0 / 0
Регистрация: 16.10.2012
Сообщений: 15
18.10.2012, 20:03  [ТС]
да, странно, потому что я такой же пример почти взял, и там всё ок. Я потёр нафик тот кусок, и забудем об этом. Я разглядывал два эти примера по пяток строк минут двадцать, но не уловил в чем косяк у меня был.

Ну да и шут с ним. Текущий этап выглядит так:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
package javaapplication3;
 
import java.io.*;
import java.net.*;
import javax.xml.bind.DatatypeConverter;
import java.util.Random;
import com.google.gson.Gson;
import java.util.*;
 
public class WebUI {
 
  private String cookie = "";
  private String host = "";
  private String port = "";
  private String login = "";
  private String password = "";
  private String token = "";
  private List torrents;
 
  public WebUI(String host, String port, String login, String password) {
    this.host = host;
    this.port = port;
    this.login = login;
    this.password = password;
  }
 
  public List GetList() {
    if (this.torrents == null) {
      String s = this.Request("?list=1");
      Gson gson = new Gson();
      GetList list = gson.fromJson(s, GetList.class);
      this.torrents = list.torrents;
    }
    return this.torrents;
  }
 
  private String Token() {
    if (this.token.equals("")) {
      String reply = Request("token.html");
      if (!reply.equals("")) {
        this.token = reply.substring(44, 108);
      }
    }
    return this.token;
  }
 
  private String Request(String path) {
    try {
      Random rnd = new Random();
      BufferedReader rd;
      String line;
      StringBuilder result = new StringBuilder();
      String url = "http://" + this.host + ":" + this.port + "/gui/" + path;
      if (!path.equals("token.html")) {
        url += "&token=" + this.Token();
        url += "&nocache=" + rnd.nextInt(10000);
      }
      URL serverAddress = new URL(url);
      HttpURLConnection connection = (HttpURLConnection) serverAddress.openConnection();
      connection.setRequestProperty("Authorization", "Basic " + DatatypeConverter.printBase64Binary((this.login + ":" + this.password).getBytes()));
      connection.setRequestProperty("Cookie", this.cookie);
      System.out.println(connection.getHeaderFields().toString());
      for (int i = 1;; i++) {
        String headerName = connection.getHeaderFieldKey(i);
        String headerValue = connection.getHeaderField(i);
        System.out.println(headerName + " = " + headerValue);
        if (headerName == null && headerValue == null) {
          // No more headers
          break;
        }
        if (headerName == null) {
          // The header value contains the server's HTTP version
        }
        if (headerName.equals("Set-Cookie")) {
          this.cookie = headerValue;
        }
      }
      InputStreamReader is = new InputStreamReader(connection.getInputStream());
      rd = new BufferedReader(is);
      while ((line = rd.readLine()) != null) {
        result.append(line);
      }
      rd.close();
      connection.disconnect();
      return result.toString();
    } catch (Exception e) {
    }
    return "";
  }
}
получает аяксом список торрентов вот в эту структуру:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
package javaapplication3;
 
import java.util.List;
 
public class GetList{
    public Number build;
    public List label;
    public List rssfeeds;
    public List rssfilters;
    public String torrentc;
    public List torrents;
 
}
гет/сет я убрал, ибо это не класс даже, а так...


соотв
Java
1
 private WebUI ui = new WebUI("192.168.1.3", "80", "логин", "пароль");
и по событию дёргаю GetList()
Java
1
2
3
4
for (Iterator<List> i = this.ui.GetList().iterator(); i.hasNext();) {
      List item = i.next();
      System.out.println(item.toString());
    }
Теперь вопрос. Как мне это всё отсортировать? =)

Каждый из this.ui.GetList() это вот такая штука
[D7EB1AE8564R66FF5A213B2E658D3FAE120EADCF , 136.0, Aachi_and_Ssipak.mkv, 1.799657397E9, 1000.0, 1.799657397E9, 3.527765866E9, 1960.0, 0.0, 0.0, 0.0, , 0.0, 0.0, 0.0, 0.0, 65536.0, -1.0, 0.0, , , Finished, 63cde0b9, 1.326110728E9, 1.326111685E9, , A:\uTorrent\complete, 0.0, 0B77D616]
которая уже распарсена в стринги и даблы.

И вот их там таких много. И мне б их отсортировать...

Пока натырил по инетам всякого и сделал вот такой код, только IDE ругается что "not abstract and does not override". Если приписать @Override; перед compare() - тоже будет ругаться...
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package javaapplication3;
 
import java.text.Collator;
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
 
 
public class Sorter implements Comparator {
 
  Collator collator = null;
 
  public Sorter() {
  }
 
  public int compare(ArrayList o1, ArrayList o2) {
    //если объекты не равны null и имеют тип File
    if (o1 != null && o2 != null && o1 instanceof ArrayList && o2 instanceof ArrayList) {
      if (o1.get(1).equals(o2.get(1))) {
        //возвращаем 0, т.к. имена одинаковы
        return collator.compare(o1.get(1), o2.get(1));
      }
      return 0;
    }
    return 0;
  }
 
  public List sort(List fileList) {
    ArrayList res = new ArrayList(fileList.size());
    res.addAll(fileList);
    Collections.sort(res, this);
    return res;
  }
}
Уф...
0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
18.10.2012, 22:45
оно хочет вот так
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package javaapplication3;
 
import java.text.Collator;
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
 
 
public class Sorter implements Comparator {
 
  Collator collator = null;
 
  public Sorter() {
  }
 
  @Override
  public int compare(Object o1, Object o2) {
    //если объекты не равны null и имеют тип File
    if (o1 != null && o2 != null && o1 instanceof ArrayList && o2 instanceof ArrayList) {
      if (((ArrayList)o1).get(1).equals(((ArrayList)o2).get(1))) {
        //возвращаем 0, т.к. имена одинаковы
        return collator.compare(((ArrayList)o1).get(1), ((ArrayList)o2).get(1));
      }
      return 0;
    }
    return 0;
  }
 
  public List sort(List fileList) {
    ArrayList res = new ArrayList(fileList.size());
    res.addAll(fileList);
    Collections.sort(res, this);
    return res;
  }
 
}
0
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
19.10.2012, 12:52
Цитата Сообщение от igordata Посмотреть сообщение
Каждый из this.ui.GetList() это вот такая штука
которая уже распарсена в стринги и даблы.

И вот их там таких много. И мне б их отсортировать...

Пока натырил по инетам всякого и сделал вот такой код, только IDE ругается что "not abstract and does not override". Если приписать @Override; перед compare() - тоже будет ругаться...
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package javaapplication3;
 
import java.text.Collator;
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
 
 
public class Sorter implements Comparator {
 
  Collator collator = null;
 
  public Sorter() {
  }
 
  public int compare(ArrayList o1, ArrayList o2) {
    //если объекты не равны null и имеют тип File
    if (o1 != null && o2 != null && o1 instanceof ArrayList && o2 instanceof ArrayList) {
      if (o1.get(1).equals(o2.get(1))) {
        //возвращаем 0, т.к. имена одинаковы
        return collator.compare(o1.get(1), o2.get(1));
      }
      return 0;
    }
    return 0;
  }
Вы реально сравниваете ArrayList-ы? Это плохая идея. Сделайте для строки класс, в котором у каждого поля будет осмысленное имя. И сделайте конструктор, который будет принимать ArrayList и расписывать значения. Пусть класс называется TorrentEntry.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class TorrentEntry {
 
    private String id;
    private String name;
    private double peers;
    private long size;
    private int chunks;
    private int chunkSize;
    private double ratio;
 
    public String getName() {
        return name;
    }
 
    public long getSize() {
        return size;
    }
 
    public double getRatio() {
        return ratio;
    }
 
    // ...
}
Тогда для сортировки по имени нужно будет написать такой Comparator:

Java
1
2
3
4
5
6
7
8
9
10
11
12
public class TorrentEntryNameComparator implements Comparator<TorrentEntry> {
 
    @Override
    public int compare(TorrentEntry te1, TorrentEntry te2) {
        return te1.getName().compareToIgnoreCase(te2.getName());
    }
 
    @Override
    public boolean equals(Object obj) {
        return false;
    }
}
А для сортировки по ratio - такой:

Java
1
2
3
4
5
6
7
8
9
10
11
12
public class TorrentEntryRatioComparator implements Comparator<TorrentEntry> {
 
    @Override
    public int compare(TorrentEntry te1, TorrentEntry te2) {
        return te1.getRatio() < te2.getRatio() ? -1 : (te1.getRatio() == te2.getRatio() ? 0 : 1);
    }
 
    @Override
    public boolean equals(Object obj) {
        return false;
    }
}
Так всё значительно упростится.
0
0 / 0 / 0
Регистрация: 16.10.2012
Сообщений: 15
23.10.2012, 02:31  [ТС]
так и сделал, спасибо. На сортировку забил, т.к. сортирует jтаблица вполне себе хорошо.
0
0 / 0 / 0
Регистрация: 16.10.2012
Сообщений: 15
24.10.2012, 16:34  [ТС]
Как и обещал, прилагаю полурабочий прототип прототипа десктоп-морды к вебморде. Может кому пригодится.
Вложения
Тип файла: 7z javaapplication3.7z (13.5 Кб, 10 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.10.2012, 16:34
Помогаю со студенческими работами здесь

Как получить ответ от модема?
Как получить ответ от модема? питался при помощи Readfile(при помощи этой функ не получаться) fileread(а через эту я получаю токо саму...

Как получить ответ от сервера?
Здравствуйте. Принимаю запрос с сервера вот таким кодом : HttpWebRequest WReq = WebRequest.Create(&quot;https://csgo500.com&quot;) as...

Как подключиться и получить данные с websocket сайта exmo.me?
Здравствуйте. Сайт exmo.me отдает данные об изменениях валют по websocket'у &quot;wss://ws.exmoney.com/connection/websocket&quot;. Это я...

Как получить ответ на запрос javascript'a?
Ситуация такая: через инди гружу страничку на ней имеется несколько javascript, один из них формирует запрос насервер где есть неизвесный...

Как получить голосовой ответ от Google?
Здравствуйте! Работаю в охранной службе, иногда нужно получить голосовой ответ от Google в наушник, т.к. смотреть в смартфон нет...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru