【问题标题】:read post request values HttpHandler读取发布请求值 HttpHandler
【发布时间】:2011-03-25 11:21:23
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java http


    【解决方案1】:

    我为我的项目 Sceye-Fi 编写了处理多部分请求的类,这是一个 HTTP 服务器,它使用 java 6 附带的 com.sun.net.httpserver 类来接收来自 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);
    }
    

    【讨论】:

      【解决方案2】:

      另一种方法是使用来自HttpCoreHttpService

      documentation 中有一个基本 HTTP 服务器示例

      【讨论】:

        猜你喜欢
        • 2015-10-09
        • 2011-03-15
        • 1970-01-01
        • 2012-12-20
        • 1970-01-01
        • 1970-01-01
        • 2013-11-26
        • 1970-01-01
        • 2018-04-04
        相关资源
        最近更新 更多