java httpclient form_Java 9 HttpClient发送multipart/form-data请求

以下是表格:

enctype=”multipart/form-data”>

何时提交此表单,请求将如下所示:

POST /example/html5/demo_form.asp HTTP/1.1

Host: 10.143.47.59:9093

Connection: keep-alive

Content-Length: 326

Accept: application/json, text/javascript, */*; q=0.01

Origin: http://10.143.47.59:9093

X-Requested-With: XMLHttpRequest

User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36

Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryEDKBhMZFowP9Leno

Accept-Encoding: gzip, deflate

Accept-Language: en-US,en;q=0.8,zh-CN;q=0.6,zh;q=0.4

Request Payload

------WebKitFormBoundaryEDKBhMZFowP9Leno

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

foo

------WebKitFormBoundaryEDKBhMZFowP9Leno

Content-Disposition: form-data; name="img"; filename="out.txt"

Content-Type: text/plain

------WebKitFormBoundaryEDKBhMZFowP9Leno--

请注意“请求有效负载”,你可以在表单中看到两个参数,用户名和img(form-data; name =“img”; filename =“out.txt”),并且名字是文件系统中的实际文件名(或路径),您将在后端按名称(而不是文件名)接收文件(例如spring controller).

如果我们使用Apache Httpclient来模拟请求,我们将编写这样的代码:

MultipartEntity mutiEntity = newMultipartEntity();

File file = new File("/path/to/your/file");

mutiEntity.addPart("username",new StringBody("foo", Charset.forName("utf-8")));

mutiEntity.addPart("img", newFileBody(file)); //img is name, file is path

但在java 9中,我们可以编写这样的代码:

HttpClient client = HttpClient.newHttpClient();

HttpRequest request = HttpRequest.

newBuilder(new URI("http:///example/html5/demo_form.asp"))

.method("post",HttpRequest.BodyProcessor.fromString("foo"))

.method("post", HttpRequest.BodyProcessor.fromFile(Paths.get("/path/to/your/file")))

.build();

HttpResponse response = client.send(request, HttpResponse.BodyHandler.asString());

System.out.println(response.body());

现在你看,我怎么能设置参数的“名称”?

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值