首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析HTTP请求

解析HTTP请求
EN

Stack Overflow用户
提问于 2014-01-23 16:15:30
回答 2查看 3.9K关注 0票数 0

目标

我正试图解析一个HTTP请求,以便检索与HTML表单一起发送的文件。

以下是表格:

代码语言:javascript
复制
<form action="http://127.0.0.1:8081" method="post" enctype="multipart/form-data">
    <input type="file" name="file" id="fileControl" />
    <input type="submit" />
</form>

多么

作为POST请求,类似于以下内容:

代码语言:javascript
复制
POST <URL> HTTP/1.1
<HEADERS>
[BLANK LINE]
---------<BOUNDARY>
<HEADERS>
[BLANK LINE]
<file content>
-----------<BOUNDARY>

我认为解析我在套接字上收到的内容是相关的。

First,我一直读到文件的开头

代码语言:javascript
复制
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
in.readLine();

然后是,为了保存文件,我要做的是:

代码语言:javascript
复制
FileOutputStream outputStream = new FileOutputStream(new File("/tmp/test"));

while ((read = clientSocket.getInputStream().read(bytes)) != -1) {
    outputStream.write(bytes, 0, read);
    outputStream.flush();
}

问题

问题是我不再读我的BufferedReader了,我在read = clientSocket.getInputStream().read(bytes)里什么也没有

问题

如何保存文件发送的POST请求?我不想使用任何want服务器,也不想使用任何库/框架,只使用纯Java。如果有什么不清楚的话,我会编辑这篇文章。提前谢谢。

EN

回答 2

Stack Overflow用户

发布于 2015-01-30 16:28:34

代码语言:javascript
复制
public HttpRequest init_request(String request_str) {
    try {
        SessionInputBufferImpl sessionInputBuffer = new SessionInputBufferImpl(new HttpTransportMetricsImpl(), 2048);
        sessionInputBuffer.bind(new ByteArrayInputStream(request_str.getBytes(Consts.ASCII)));
        DefaultHttpRequestParser requestParser = new DefaultHttpRequestParser(sessionInputBuffer);
        HttpRequest request = requestParser.parse();

        // Solve post request entity bug (always returns null)
        if(request instanceof HttpEntityEnclosingRequest){
            HttpEntityEnclosingRequest ereq = (HttpEntityEnclosingRequest) request;

            ContentLengthStrategy contentLengthStrategy = StrictContentLengthStrategy.INSTANCE;
            long len = contentLengthStrategy.determineLength(request);
            InputStream contentStream = null;
            if (len == ContentLengthStrategy.CHUNKED) {
                contentStream = new ChunkedInputStream(sessionInputBuffer);
            } else if (len == ContentLengthStrategy.IDENTITY) {
                contentStream = new IdentityInputStream(sessionInputBuffer);
            } else {
                contentStream = new ContentLengthInputStream(sessionInputBuffer, len);
            }
            BasicHttpEntity ent = new BasicHttpEntity();
            ent.setContent(contentStream);
            ereq.setEntity(ent);
        }

        return request;
    } catch (Exception e) {
        SLogger.error("Unable to parse request", e);
        return null;
    }
}
票数 0
EN

Stack Overflow用户

发布于 2014-01-23 16:32:30

使用/httpclient库生成和发送post请求。任何其他的事情都是为了不赚钱而做大量的工作。

请参阅https://hc.apache.org/httpcomponents-client-ga/quickstart.html

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21313643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档