gpt4 book ai didi

java - 读取帖子请求值 HttpHandler

转载 作者:搜寻专家 更新时间:2023-10-31 08:24:40 24 4
gpt4 key购买 nike

我正在编写一个小的 Java 应用程序,它实现了一个从客户端接收 http post 命令的 http 服务。

我用来实现所有这些的类是 com.sun.net 中的 HttpHandler 和 HttpServer。包。

现在我正在实现一个处理请求的 handle(HttpExchange exchange) 函数,并且我无法读取请求接收到的 post 值,因为我只能访问这些值是通过 HttpExchange.getResponseBody() 获取的,它只是一个输出流。

我正在寻找解析文本发布值和上传的文件。

最佳答案

我已经为我的项目编写了处理多部分请求的类 Sceye-Fi ,一个使用 Java 6 附带的 com.sun.net.httpserver 类的 HTTP 服务器,用于接收来自 Eye-Fi 的照片上传。卡片。

这有助于文件上传(多部分帖子)。

对于非多部分帖子,您需要执行以下操作:

// determine encoding
Headers reqHeaders = exchange.getRequestHeaders();
String contentType = reqHeaders.getFirst("Content-Type");
String encoding = "ISO-8859-1";
if (contentType != null) {
Map<String,String> parms = ValueParser.parse(contentType);
if (parms.containsKey("charset")) {
encoding = parms.get("charset");
}
}
// read the query string from the request body
String qry;
InputStream in = exchange.getRequestBody();
try {
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte buf[] = new byte[4096];
for (int n = in.read(buf); n > 0; n = in.read(buf)) {
out.write(buf, 0, n);
}
qry = new String(out.toByteArray(), encoding);
} finally {
in.close();
}
// parse the query
Map<String,List<String>> parms = new HashMap<String,List<String>>();
String defs[] = qry.split("[&]");
for (String def: defs) {
int ix = def.indexOf('=');
String name;
String value;
if (ix < 0) {
name = URLDecoder.decode(def, encoding);
value = "";
} else {
name = URLDecoder.decode(def.substring(0, ix), encoding);
value = URLDecoder.decode(def.substring(ix+1), encoding);
}
List<String> list = parms.get(name);
if (list == null) {
list = new ArrayList<String>();
parms.put(name, list);
}
list.add(value);
}

关于java - 读取帖子请求值 HttpHandler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3409348/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com