getInputStream()挂起POST请求

Ale*_*sky 2 java post http

我的问题是,getInputStream()当我在发布到服务器后尝试打开流时挂起.用python编写的服务器给出了一条错误消息,让我相信它无法正确解析我的查询字符串.请帮我诊断一下这个问题.

我使用以下代码发布到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);
Run Code Online (Sandbox Code Playgroud)

...

    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.");
    }
Run Code Online (Sandbox Code Playgroud)

查询字符串由此组成(\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--
Run Code Online (Sandbox Code Playgroud)

Ant*_*era 6

如果我没记错的话,URLConnection#getInputStream()实际上是将请求发送到服务器(如果写入输出流的请求不够大而导致刷新).然后它会挂起,直到从服务器刷新响应.

你可以在服务器上调试吗?通过这种方式,您可以了解它获得了多远以及连接保持打开的原因.如果服务器要关闭连接,我预计客户端会出现异常.

如果您使用的是Eclipse,请使用Window菜单 - > Show View - > Other并选择TCP/IP Monitor.您可以使用它来真正看到通过电线发送的内容.

  • +1提示Eclipse内的TCP/IP监视器 (3认同)