我正在编写一个简单的片段,发送简单的帖子请求。
目前我正在构建请求:
// Construct data
String data = URLEncoder.encode("param1", "UTF-8") + "=" + URLEncoder.encode("val1", "UTF-8");
data += "&" + URLEncoder.encode("param2", "UTF-8") + "=" + URLEncoder.encode("val2", "UTF-8");
// Send data
URL url = new URL("http://server:8080/servlet/upload");
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.write(data);
wr.flush();
// do stuff with response....
截至目前,这是有效的。但我需要添加文件上传作为多部分POST请求。
我怎样才能做到这一点?如果可能的话,我想避免在公共区域使用HttpClient
。
答案 0 :(得分:3)
目前,您根本没有使用HTTP。如果您打算进行POST,首先需要确保发送正确的标题等,这样您实际上就是在进行HTTP连接。您需要遵循RFC 1867(http://tools.ietf.org/html/rfc1867)将文件内容正确编码到POST中。这并不容易,这就是为什么有些库可以帮到你。所以我不得不问:为什么要避免使用HttpClient?我一直用它来达到这个目的。它可靠,完整且高效。你是否缩短(内存/磁盘)空间?
答案 1 :(得分:1)
就此而言,您需要使用RFC 1687和RFC 2388中指定的格式构建包含数据的输出流。这是很多工作,我不会发布启动代码示例,抱歉:)然而,RFC包含清晰的信息和几个示例数据应该是什么样子。这绝对可行。
答案 2 :(得分:0)
试试这个,因为这适用于我的情况
File f = new File(filePath);
PostMethod filePost = new PostMethod(url);
Part[] parts = { new FilePart("file", f) };
filePost.setRequestEntity(new MultipartRequestEntity(parts,
filePost.getParams()));
HttpClient client = new HttpClient();
status = client.executeMethod(filePost);
logger.info("upload status: " + status);
答案 3 :(得分:0)
此代码段很适合我:Upload files by sending multipart request programmatically
它没有任何外部依赖,只有〜150行代码包括注释,并且恕我直言比Apache HttpClient库更容易处理。