【问题标题】:parsing form parameters from raw http requests in java从java中的原始http请求解析表单参数
【发布时间】:2014-08-20 14:50:27
【问题描述】:

我正在尝试从原始 HTTP 请求消息(如下所示)中提取一些信息并将它们存储到 org.apache.http.message.BasicHttpRequest 的实例中 (https://hc.apache.org/httpcomponents-core-ga/httpcore/apidocs/index.html)类。

我能够使用 org.apache.http.message.BasicLineParser 类及其方法 parseHeader(String value, LineParser parser) 来处理(解析 + 存储) headers,但是我不知道如何处理表单传递的参数。

POST https://gist.github.com:443/gists HTTP/1.1
Host: gist.github.com
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en,fr;q=0.8,it-it;q=0.6,it;q=0.4,en-us;q=0.2
Accept-Encoding: gzip, deflate
DNT: 1
Referer: https://gist.github.com/
Connection: keep-alive
Content-Type: multipart/form-data; boundary=-------------------------10314229756379422411656878663
Content-Length: 1242

-----------------------------10314229756379422411656878663
Content-Disposition: form-data; name="parameter_name"

parameter_value

你知道一个实用程序可以解析从上面的标题之后开始的内容(即在第一个空行之后)吗?我有兴趣收集的是请求正文中存在的所有 对。

我已经阅读过类似的答案/问题,例如Parsing raw HTTP Request,但我没有发现任何对表单数据组件有帮助的东西

提前感谢您的帮助和时间

【问题讨论】:

    标签: java apache-httpclient-4.x text-parsing http-request-parameters


    【解决方案1】:

    您看到的是 MIME 编码的内容正文。 HttpClient 与内容无关,因此不提供解析此类内容的方法。但是,可以使用Apache Mime4J 这样做。

    【讨论】:

    • 我尝试这样做,但似乎我必须定义内容处理程序,这不是一项简单的任务。我希望有更类似于 httpclient 为解析标头提供的东西
    • @Alby:Mime4J 支持 SAX 样式(事件驱动)和 DOM 样式(对象模型)解析。您可以使用 DefaultMessageBuilder#parseMessage 将 mime 内容解析为对象模型
    • 非常感谢! (我仍然无法投票,但我接受了你的回答)。我能够使用DefaultMessageBuilder dmb = new DefaultMessageBuilder(); AbstractMessage am = (AbstractMessage) dmb.parseMessage(instream); Multipart mp = (Multipart) am.getBody(); List<Entity> es = mp.getBodyParts(); for (int j = 0; j < es.size(); j++) { System.out.println(es.get(j).getHeader().toString()); } 获得 parameter_name
    猜你喜欢
    • 2012-10-26
    • 1970-01-01
    • 1970-01-01
    • 2021-01-18
    • 2016-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多