سؤال

هل هناك طريقة لاستخدام WebDAV مع J2ME (بعض المكتبات أو الترميز اليدوي)؟

لقد حاولت:
- javax.microedition.io.httpconnection., ، ولكن طريقة "البحث" غير مدعومة هناك
- javax.microedition.io.socketconnection. مع طلب 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)
- تستخدم Wfetch. للعب حولها مع طلب WebDAV
- تستخدم مراقبة الشبكة لمقارنة الطلبات من Wfetch و App.
:) أخيرا انها تعمل! رمز النتيجة:

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();

نصائح أخرى

ماذا تقصد ب "لا شيء يعود"؟ لا هيئة استجابة؟ لا رمز الحالة؟

أوصي بتتبع ما يجري على "سلك" ...

تحديث: هل حاولت إضافة رأس مضيف؟

لمعلوماتك إذا كنت تختبر على هاتف محمول فعلي، فهناك فرصة عادلة لمشغل شبكة المحمول الخاص بك يمكن حظر حركة المرور غير المتشعب.

قد ترغب أولا في التحقق من ذلك، يمكنك إجراء طلبات الدخول ونشرها إلى الخادم أولا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top