如何过帐表格参数?

时间:2019-08-13 14:14:36

标签: jetty

我正在尝试发送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查询参数。什么都没有添加到请求正文中。

正确张贴表单参数的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

HTML表单是POST请求中的正文内容。

因此,这意味着您必须使用org.eclipse.jetty.client.api.ContentProviderRequest.content(ContentProvider) API。

有2种ContentProvider实现用于处理HTML表单。

FormContentProvider

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();

MultiPartContentProvider

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();