App Engine:如何查看POST请求中的内容

时间:2011-01-24 09:36:34

标签: java google-app-engine post request servlets

我向我的AppEngine服务器发送POST请求。 HttpServletRequest告诉我:

POST /connexionDeconnexion HTTP/1.1
User-Agent: Java/1.6.0_20
Host: localhost:8888
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 25

我发送了世界“HelloHelloHelloHelloHello”,根据Content-Length这是正确的。但是,我不知道如何恢复它。 你能解释一下吗?

2 个答案:

答案 0 :(得分:4)

正如Jigar所说,你可以使用request.getParameter()。如果您确实提交表单或将参数指定为URL参数(http:// myhost / mypath?myparam = myvalue),则此方法有效。

如果您将数据作为POST正文发送,则应从其正文中读取数据,即通过调用request.getInputStream()检索输入流,然后从此流中读取。

答案 1 :(得分:1)

你shoudl给param名称和值,然后你可以从httpRequest对象中提取param。

request.getParameter("paramName");

<强>更新

客户端

String param = "value";
File textFile = new File("/path/to/file.txt");
File binaryFile = new File("/path/to/file.bin");
String boundary = Long.toHexString(System.currentTimeMillis()); // Just generate some unique random value.

URLConnection connection = new URL(url).openConnection();
connection.setDoOutput(true);
connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
PrintWriter writer = null;
try {
    OutputStream output = connection.getOutputStream();
    writer = new PrintWriter(new OutputStreamWriter(output, charset), true); // true = autoFlush, important!

    // Send normal param.
    writer.println("--" + boundary);
    writer.println("Content-Disposition: form-data; name=\"param\"");
    writer.println("Content-Type: text/plain; charset=" + charset);
    writer.println();
    writer.println(param);

    // Send text file.
    writer.println("--" + boundary);
    writer.println("Content-Disposition: form-data; name=\"textFile\"; filename=\"" + textFile.getName() + "\"");
    writer.println("Content-Type: text/plain; charset=" + charset);
    writer.println();
    BufferedReader reader = null;
    try {
        reader = new BufferedReader(new InputStreamReader(new FileInputStream(textFile), charset));
        for (String line; (line = reader.readLine()) != null;) {
            writer.println(line);
        }
    } finally {
        if (reader != null) try { reader.close(); } catch (IOException logOrIgnore) {}
    }

    // Send binary file.
    writer.println("--" + boundary);
    writer.println("Content-Disposition: form-data; name=\"binaryFile\"; filename=\"" + binaryFile.getName() + "\"");
    writer.println("Content-Type: " + URLConnection.guessContentTypeFromName(binaryFile.getName());
    writer.println("Content-Transfer-Encoding: binary");
    writer.println();
    InputStream input = null;
    try {
        input = new FileInputStream(binaryFile);
        byte[] buffer = new byte[1024];
        for (int length = 0; (length = input.read(buffer)) > 0;) {
            output.write(buffer, 0, length);
        }
        output.flush(); // Important! Output cannot be closed. Close of writer will close output as well.
    } finally {
        if (input != null) try { input.close(); } catch (IOException logOrIgnore) {}
    }
    writer.println(); // Important! Indicates end of binary boundary.

    // End of multipart/form-data.
    writer.println("--" + boundary + "--");
} finally {
    if (writer != null) writer.close();
}

另见