从HttpExchange获取POST数据

问题描述 投票:0回答:1

这似乎是一个非常常见的用例,应该有一个简单的解决方案,但我所看到的每个地方都充满了极其]肿的示例。

假设我的表单看起来像:

<form action="http://localhost/endpoint" method="POST" enctype="multipart/form-data">
    <input type="text" name="value" />
    <input type="submit" value="Submit"/>
</form>

我提交了它,并且在服务器上希望获得输入值:

在服务器上,我建立了一个具有单个端点的HttpServer,在这种情况下,它只是直接发送正文数据:

import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;

import java.io.*;
import java.net.InetSocketAddress;
import java.util.function.Consumer;

public class Main {
    public static void main(String[] args) {
        try {
            HttpServer server = HttpServer.create(new InetSocketAddress(80), 10);
            server.setExecutor(null);
            server.createContext(
                    "/endpoint",
                    (HttpExchange httpExchange) -> {

                            InputStream input = httpExchange.getRequestBody();
                            StringBuilder stringBuilder = new StringBuilder();

                            new BufferedReader(new InputStreamReader(input))
                                .lines()
                                .forEach( (String s) -> stringBuilder.append(s + "\n") );

                            httpExchange.sendResponseHeaders(200, stringBuilder.length());

                            OutputStream output = httpExchange.getResponseBody();
                            output.write(stringBuilder.toString().getBytes());

                            httpExchange.close();
                    }
            );

            server.start();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

现在,如果使用输入"hi"提交表单,则返回

------WebKitFormBoundaryVs2BrJjCaLCWNF9o
Content-Disposition: form-data; name="value"

hi
------WebKitFormBoundaryVs2BrJjCaLCWNF9o--

这告诉我应该有一种获取字符串值的方法,但是我看到的唯一方法是手动解析它。

“在这里做。)
java http httpserver http-post-vars
1个回答
0
投票
public Server() throws IOException { HttpServer server = HttpServer.create(new InetSocketAddress(8000), 0); server.createContext("/", new HttpHandler() { @Override public void handle(HttpExchange t) throws IOException { StringBuilder sb = new StringBuilder(); InputStream ios = t.getRequestBody(); int i; while ((i = ios.read()) != -1) { sb.append((char) i); } System.out.println("hm: " + sb.toString()); String response = " <html>\n" + "<body>\n" + "\n" + "<form action=\"http://localhost:8000\" method=\"post\">\n" + "input: <input type=\"text\" name=\"input\"><br>\n" + "input2: <input type=\"text\" name=\"input2\"><br>\n" + "<input type=\"submit\">\n" + "</form>\n" + "\n" + "</body>\n" + "</html> "; t.sendResponseHeaders(200, response.length()); OutputStream os = t.getResponseBody(); os.write(response.getBytes()); os.close(); } }); server.setExecutor(null); server.start(); }
© www.soinside.com 2019 - 2024. All rights reserved.