我正在尝试发送HTTP POST表单参数。我知道Content-Type必须为application/x-www-form-urlencoded
,并且参数必须在请求正文中进行编码。
In version 9.0.6,Jetty似乎自动完成了此操作:
POST请求以application / x-www-form-urlencoded内容类型发送,并且POST参数值自动进行URL编码。
但是in version 9.4.19,我看到文档已更改,现在显示为:
通过param()方法添加的POST参数值会自动进行URL编码。
果然,调用:
httpClient.POST("http://example.com/entity/1")
.param("p", "value")
.send();
现在将参数视为URL查询参数。什么都没有添加到请求正文中。
正确张贴表单参数的正确方法是什么?
答案 0 :(得分:1)
HTML表单是POST请求中的正文内容。
因此,这意味着您必须使用org.eclipse.jetty.client.api.ContentProvider
和Request.content(ContentProvider)
API。
有2种ContentProvider
实现用于处理HTML表单。
org.eclipse.jetty.client.util.FormContentProvider
application/x-www-form-urlencoded
import org.eclipse.jetty.client.util.FormContentProvider;
import org.eclipse.jetty.util.Fields;
Fields fields = new Fields();
fields.put("fruit", "apple");
httpClient.POST("http://example.com/entity/1")
.content(new FormContentProvider(fields))
.send();
org.eclipse.jetty.client.util.MultiPartContentProvider
multipart/form-data
import org.eclipse.jetty.client.util.MultiPartContentProvider;
import org.eclipse.jetty.client.util.StringContentProvider;
MultiPartContentProvider multiPart = new MultiPartContentProvider();
multiPart.addFieldPart("fruit", new StringContentProvider("apple"), null);
multiPart.close();
httpClient.POST("http://example.com/entity/1")
.content(multiPart)
.send();