Question

Y at-il un moyen d'utiliser WebDAV avec J2ME (certaines bibliothèques ou codage manuel)?

J'ai essayé:
- javax.microedition.io.HttpConnection , mais la méthode « SEARCH » pas pris en charge il y a
- javax.microedition.io.SocketConnection avec Http demande - retourne rien en réponse
Peut-être quelque chose de mal avec mon en-tête de code ou 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();
Était-ce utile?

La solution 2

Julian +1 vous a eu raison de la propriété hôte, QRSO +1, merci à tous! Ainsi,
- J'ai trouvé le service WebDAV gratuit MyDisk.se (recherche pas permis, donc je PROPFIND)
- utilisé WFetch jouer avec demande WebDAV
- utilisé Network Monitor pour comparer les demandes de WFetch et mon application.
:) Enfin, il travaille! Code de résultat:

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

Autres conseils

Que voulez-vous dire par « retourne rien »? Aucun organisme de réponse? Aucun code d'état?

Je recommande de suivre ce qui se passe sur le « fil » ...

Mise à jour: vous avez essayé d'ajouter un en-tête d'hôte

Pour votre information Si vous testez sur un téléphone mobile réel, alors il y a une chance de votre opérateur de réseau mobile pourrait être bloquer le trafic non HTTP.

Vous pouvez d'abord vérifier que vous pouvez faire des requêtes GET et POST au premier serveur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top