2011-07-12 3 views
2

私の問題は、サーバに投稿した後にストリームを開くときに、getInputStream()がハングすることです。 Pythonで書かれたサーバーは、私のクエリ文字列を正しく解析することができないと信じさせるエラーメッセージを出します。この問題を診断するのを手伝ってください。getInputStream()POSTリクエストでハング

私は、次のコードでWebサーバに掲示しています:

String boundarySolo = "--158211729626281"; 
String boundary = boundarySolo + "\r\n"; 
String contentHeader = "Content-Disposition: form-data; name=\""; 
URL requestUrl; 
URLConnection connection; 
String queryString = new String(); 

try{ 
    requestUrl = new URL(config.getServerUrl()); 
    connection = requestUrl.openConnection(); 
    connection.setReadTimeout(1000); 
    connection.setDoOutput(true); 
    connection.setDoInput(true); 

    connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundarySolo); 

。 。 。

outStream = new DataOutputStream(connection.getOutputStream()); 

    System.out.println("Writing bytes..."); 
    outStream.writeUTF(queryString); 
    System.out.println("Bytes written"); 
    outStream.flush(); 
    System.out.println("Buffer flushed."); 
    outStream.close(); 
    System.out.println("Stream closed."); 

    try{ 
    inStream = new DataInputStream(connection.getInputStream()); 
    String buffer; 

    System.out.println("Entering the loop."); 

    while((buffer = inStream.readLine())!= null) 
     System.out.println(buffer); 

    System.out.println("Leaving the loop."); 

    } 
    catch (SocketTimeoutException e) { 
    System.out.println("Socket timed out."); 
    } 

クエリ文字列は、(各行の終わりに\r\nで)こので構成されています。私が正しく覚えていれば

--158211729626281 
    Content-Disposition: form-data; name="view" 

    a 
    --158211729626281 
    Content-Disposition: form-data; name="termdb" 

    Saccharomyces_cerevisiae.etd 
    --158211729626281 
    Content-Disposition: form-data; name="raw_weights" 

    blank 
    --158211729626281 
    Content-Disposition: form-data; name="MAX_FILE_SIZE" 

    256 
    --158211729626281 
    Content-Disposition: form-data; name="cutoff_Evalue" 

    0.01 
    --158211729626281 
    Content-Disposition: form-data; name="min_term_size" 

    2 
    --158211729626281 
    Content-Disposition: form-data; name="effective_tdb_size" 

    0 
    --158211729626281 
    Content-Disposition: form-data; name="stats" 

    wsum 
    --158211729626281 
    Content-Disposition: form-data; name="transform_weights" 

    null 
    --158211729626281 
    Content-Disposition: form-data; name="cutoff_type" 

    none 
    --158211729626281 
    Content-Disposition: form-data; name="output" 

    tab 
    --158211729626281-- 
+0

(テキストが/ *サーバーから返されていると仮定)? Pythonをターゲットにした質問にそれを再び埋め込むことができます。 – BalusC

答えて

0

ペイロードをhttp://apikitchen.com/ のようにテストし、返される内容を確認してください。

これをやりなおすこともできます。 HTTPClient、Jersey Client、Resty(私が作者)は、HTTPとMIMEタイプの深みに没頭することなくこの問題を解決します。ここで

はあなたが始めるためにRestyの例である:

import us.monoid.web.Resty; 
import static us.monoid.web.Resty.*; 

Resty r = new Resty(); 
String result = r.text(config.getServerUrl(), 
     form(data("MAX_FILE_SIZE","256"), 
      data("stats", "wsum"),...etc.etc.).toString(); 

あなたは、サーバにどのようなエラーメッセージを取得している

+0

私はHttpClientを使用しました。ありがとう。 –

6

、URLConnectionの#のgetInputStream()は実際にサーバに要求を送信するものです(出力ストリームに書き込まれた要求がフラッシュを発生させるのに十分な大きさでなかった場合)。その後、応答がサーバーからフラッシュされるまでハングします。

サーバーでデバッグできますか?そうすれば、それがどこまで届くのか、なぜ接続が開いているのかを知ることができます。サーバーが接続を閉じる場合は、クライアント側で例外が発生することが予想されます。

Eclipseを使用している場合は、ウィンドウメニュー - >ビュー表示 - >その他を使用し、TCP/IPモニターを選択します。これを使用して、ワイヤを介して送信されるものを実際に確認することができます。

+3

Eclipse内のTCP/IPモニタへのヒント+1 –

+0

TCP/IPモニタが必要な場合は、Web Developer ToolsをEclipseにインストールする必要があります。 – golimar