龙空技术网

Http post 请求报文格式分析与Java实现文件上传

码农生涯 584

前言:

今天各位老铁们对“java请求报文文档怎么写”都比较着重,咱们都想要剖析一些“java请求报文文档怎么写”的相关文章。那么小编在网摘上收集了一些关于“java请求报文文档怎么写””的相关内容,希望姐妹们能喜欢,咱们一起来了解一下吧!

POST报文格式

POST /api/feed/ HTTP/1.1

Accept-Encoding: gzip

Content-Length: 225873

Content-Type: multipart/form-data; boundary=-------3cb6q348891v0

Host:

Connection: Keep-Alive

---------3cb6q348891v0

Content-Disposition: form-data; name="userId"

Content-Type: text/plain; charset=UTF-8

Content-Transfer-Encoding: 8bit

623bd5345abaf75e9a84939a

---------3cb6q348891v0

Content-Disposition: form-data; name="nickName"

Content-Type: text/plain; charset=UTF-8

Content-Transfer-Encoding: 8bit

ddedhouqnickname

---------3cb6q348891v0

Content-Disposition: form-data; name="images"; filename="/Users/xiawenquan/Desktop/ip数据报文.png"

Content-Type: application/octet-stream

这里是图片的二进制数据

---------3cb6q348891v0--

这里咱们提交的是userId、nickName和一张图片

post报文格式分析

#请求的请求方式 请求的子路径 HTTP协议的版本号

POST /api/feed/ HTTP/1.1

###########请求头信息##########

#服务器返回的数据须要使用gzip压缩

Accept-Encoding: gzip

#请求的内容长度为4579876

Content-Length: 4579876

#内容的类型为"multipart/form-data",请求参数分隔符(boundary)为-------3cb6q348891v0

Content-Type: multipart/form-data; boundary=-------3cb6q348891v0

#请求的根域名

Host:

#HTTP连接方式为持久链接,Keep-Alive功能使客户端到服务器端的链接持续有效,当出现对服务器的后续请求时,Keep-Alive功能避免了创建或者从新创建链接

Connection: Keep-Alive

#\r--回车符(return),回到一行的开头,\n--换行符(newline),另起一行

\r\n

#这样的格式:-- + boundary(boundary用于做为请求参数之间的界限标识),无论boundary自己有没有这个"--",开头"--"不能省略

---------3cb6q348891v0

Content-Disposition: form-data; name="userId"

Content-Type: text/plain; charset=UTF-8

Content-Transfer-Encoding: 8bit

\r\n

623bd5345abaf75e9a84939a

\r\n

\r\n

---------3cb6q348891v0

Content-Disposition: form-data; name="images"; filename="/Users/xiawenquan/Desktop/ip数据报文.png"

Content-Type: application/octet-stream

这里是图片的二进制数据

---------3cb6q348891v0--

参数实体的最后一行是: --加上boundary加上--,最后换行

----使用纯java模拟post文件上传的报文------

public static void main(String[] args) {        String filePath="/Users/xiawenquan/Desktop/ip数据报文.png";        String unid="623bd5345abaf75e9a84939a";        DataOutputStream out = null;        final String newLine = "\r\n";        final String prefix = "--";        try {            URL url = new URL(";);            HttpURLConnection conn = (HttpURLConnection)url.openConnection();            String BOUNDARY = "------3cb6q348891v0";            conn.setRequestMethod("POST");            // 发送POST请求必须设置如下两行            conn.setDoOutput(true);            conn.setDoInput(true);            conn.setUseCaches(false);            conn.setRequestProperty("connection", "Keep-Alive");            conn.setRequestProperty("Charsert", "UTF-8");            conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);            out = new DataOutputStream(conn.getOutputStream());            // 添加参数file            File file = new File(filePath);            StringBuilder sb1 = new StringBuilder();            sb1.append(prefix);            sb1.append(BOUNDARY);            sb1.append(newLine);            sb1.append("Content-Disposition: form-data;name=\"file\";filename=\"" + file.getName() + "\"" + newLine);            sb1.append("Content-Type:application/octet-stream");            sb1.append(newLine);            sb1.append(newLine);            out.write(sb1.toString().getBytes());            DataInputStream in = new DataInputStream(new FileInputStream(file));            byte[] bufferOut = new byte[1024];            int bytes = 0;            while ((bytes = in.read(bufferOut)) != -1) {                out.write(bufferOut, 0, bytes);            }            out.write(newLine.getBytes());            in.close();            // 添加参数userId            StringBuilder sb = new StringBuilder();            sb.append(prefix);            sb.append(BOUNDARY);            sb.append(newLine);            sb.append("Content-Disposition: form-data;name=\"userId\"");            sb.append(newLine);            sb.append(newLine);            sb.append("623bd5345abaf75e9a84939a");            out.write(sb.toString().getBytes());            // 添加参数nickName            StringBuilder sb = new StringBuilder();            sb.append(prefix);            sb.append(BOUNDARY);            sb.append(newLine);            sb.append("Content-Disposition: form-data;name=\"nickName\"");            sb.append(newLine);            sb.append(newLine);            sb.append("ddedhouqnickname");            out.write(sb.toString().getBytes());            byte[] end_data = ("\r\n--" + BOUNDARY + "--\r\n").getBytes();            // 写上结尾标识            out.write(end_data);            out.flush();            out.close();            // 定义BufferedReader输入流来读取URL的响应            BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));            String line = null;            while ((line = reader.readLine()) != null) {                System.out.println(line);            }        } catch (Exception e) {            System.out.println("发送POST请求出现异常!" + e);            e.printStackTrace();        }    }

标签: #java请求报文文档怎么写