Вопрос

Есть ли способ использовать WebDAV с J2ME (некоторые библиотеки или ручное кодирование)?

Я пытался:
- класс javax.microedition.Ио.HttpConnection, но метод "ПОИСКА" там не поддерживается
- javax.microedition.io.Подключение к сокетам с Http - запрос - ничего не возвращается в ответ
Может быть, что-то не так с моим кодом или HTTP-заголовком:

    String response = "";
    String query = "<?xml version='1.0'?> " 
            + "<g:searchrequest xmlns:g='DAV:'> "
            + "<g:sql> "
            + "SELECT 'DAV:displayname' "
            + "FROM 'http://exchangeserver.com/Public/' "
            + "</g:sql> "
            + "</g:searchrequest> ";
    String len = String.valueOf(query.length());
    SocketConnection hc = (SocketConnection) Connector
            .open("socket://exchangeserver.com:8080");
    DataOutputStream dout = 
            new DataOutputStream(hc.openOutputStream());
    DataInputStream din = new DataInputStream(hc.openInputStream());
    String userPass = "username" + ":" + "password";
    byte[] encoded = 
            Base64OutputStream.encode(userPass.getBytes(), 0,
            userPass.length(), false, false);
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    String request = "SEARCH /Public/ HTTP/1.1\r\n"
            +"Content-Type:text/xml\r\nContent-Length:"
            + len
            + "\r\nAuthorization:Basic "
            + new String(encoded)
            + "\r\n\r\n";
    bos.write(request.getBytes());
    bos.write(query.getBytes());
    dout.write(bos.toByteArray());
    dout.flush();
    dout.close();
    byte[] bs = new byte[900];
    din.readFully(bs);
    bos = new ByteArrayOutputStream();
    bos.write(bs);
    din.close();
    hc.close();
    response = bos.toString();
Это было полезно?

Решение 2

Джулиан +1 вы были правы в выборе Принимающей стороны, QRSO + 1, спасибо всем!Итак,
- Я нашел бесплатный сервис WebDAV MyDisk.se (ПОИСК запрещен, поэтому я использовал PROPFIND)
- использованный Выборка чтобы поиграть с запросом WebDAV
- использованный Сетевой монитор чтобы сравнить запросы от WFetch и моего приложения.
:) Наконец-то это работает!Код результата:

String response = "";
String query = "<?xml version='1.0' encoding='UTF-8'?>\r\n"
        + "<d:propfind xmlns:d='DAV:'>\r\n"
        + "<d:prop><d:getcontenttype/></d:prop>\r\n"
        + "<d:prop><d:getcontentlength/></d:prop>\r\n"
        + "</d:propfind>\r\n";

String len = String.valueOf(query.length());
SocketConnection hc = (SocketConnection) Connector
        .open("socket://79.99.7.153:80");
DataOutputStream dout = new DataOutputStream(hc.openOutputStream());
DataInputStream din = new DataInputStream(hc.openInputStream());
String userPass = "login" + ":" + "password";
byte[] encoded = Base64OutputStream.encode(userPass.getBytes(), 0,
        userPass.length(), false, false);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
String request = "PROPFIND /mgontar/ HTTP/1.1\r\n" 
        + "Depth: 1\r\n"
        + "Host: mydisk.se:80\r\n" 
        + "Accept: */*\r\n"
        + "Content-Type: text/xml\r\n" 
        + "Content-Length: " + len
        + "\r\nAuthorization: Basic " + new String(encoded)
        + "\r\n\r\n";
bos.write(request.getBytes());
bos.write(query.getBytes());
dout.write(bos.toByteArray());
dout.flush();
dout.close();
byte[] bs = new byte[900];
din.readFully(bs);
bos = new ByteArrayOutputStream();
bos.write(bs);
din.close();
hc.close();
response = bos.toString();

Другие советы

Что вы подразумеваете под "ничто не возвращается"?Нет ответного органа?Нет кода состояния?

Я рекомендую отследить, что происходит на "проводе"...

Обновить:вы пробовали добавить заголовок host?

К вашему сведению, если вы тестируете на реальном мобильном телефоне, то есть большая вероятность, что ваш оператор мобильной связи может блокировать трафик, отличный от HTTP.

Возможно, вам захочется сначала проверить, что вы можете сначала отправлять запросы GET и POST на сервер.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top