2009-04-04 9 views
1

J2MEでWebDAVを使用する方法はありますか(一部のライブラリまたはマニュアルコーディング)?WebDAV with J2ME

私が試してみた:Http requestjavax.microedition.io.SocketConnection - - - 方法があり
をサポートしていない "SEARCH" javax.microedition.io.HttpConnection、しかし
何も反応して返さない
たぶん私のコードまたは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(SEARCHは許可されていないので、私はPROPFINDを使用)
が - のWebDAV要求
で遊ぶためにWFetchを使用 - WFetchでは、私のアプリからの要求を比較するNetwork Monitorを使用しました。
:)最後に動作しています! 結果コード:

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

「何も返さない」とはどういう意味ですか?レスポンスボディはありませんか?ステータスコードはありませんか?

私は「ワイヤ」に何が起こっているのか追跡することをお勧めします

...

UPDATE:あなたがホストヘッダーを追加しようとしていますか?

+0

回答ありがとうございました。 SocketConnection InputStream(応答を表す)では何も返されません。さて、私はトラフィックを盗聴しようとします。 –

+0

いいえ、私はホストヘッダーを追加しようとしなかった、私もそれを試みます。 –

1

FYI実際の携帯電話でテストしている場合、モバイルネットワーク事業者がHTTP以外のトラフィックをブロックしている可能性があります。

最初にサーバーにGETリクエストとPOSTリクエストを行うことができます。