Java 使用OkHttp 3发送原始POST请求

Java 使用OkHttp 3发送原始POST请求,java,http,okhttp3,Java,Http,Okhttp3,使用OkHttp发送POST请求,我看到他们使用FormBody.Builder,但这需要我手动输入POST数据的每个名称和值。有没有一种方法可以创建一个带有POST数据的单个字符串的RequestBody?例如,代替 FormBody.Builder bodyBuilder = new FormBody.Builder(); bodyBuilder.add("name", "value"); bodyBuilder.add("name2", "value2"); …正在做 bodyBuil

使用OkHttp发送POST请求,我看到他们使用FormBody.Builder,但这需要我手动输入POST数据的每个名称和值。有没有一种方法可以创建一个带有POST数据的单个字符串的RequestBody?例如,代替

FormBody.Builder bodyBuilder = new FormBody.Builder();

bodyBuilder.add("name", "value");
bodyBuilder.add("name2", "value2");
…正在做

bodyBuilder.add("name=value&name2=value2");

当然可以,使用
RequestBuilder

  Request request = new Request.Builder()
      .url(url)
      .post(body) // here you put your body
      .build();

但是URL编码和其他相关内容将在您这边。

创建一个名为FORM的MediaType变量:

public static final MediaType FORM = MediaType.parse("multipart/form-data");
使用表单变量和未解析的参数(字符串)创建RequestBody:

发布完整的requestBody变量

Request request = new Request.Builder()
    .url(url)
    .post(requestBody)
    .build();

您可以这样做:

RequestBody body = RequestBody.create(MediaType.get("application/x-www-form-urlencoded"), "key1=value1&key2=value2");

Request request = new Request.Builder()
.url(url)
.post(body)
.build();

欢迎来到StackOverflow!“手动输入”是什么意思?您将它放在源代码中一次,就这样吗?您是否尝试过
RequestBody.create(MediaType contentType,String content)
?将contentType和内容作为字符串传递。是的,但我正在处理的项目是基于解析POST数据和发送大量请求。而且,每次将原始数据转换为地图都需要花费性能Correia是的,我这样做了,但由于某种原因,它不会发送任何数据。。。contentType是否重要?@JohnRock尝试创建此变量
public static final MediaType FORM=MediaType.parse(“多部分/表单数据”)。将表单变量作为contentType传递。由于某些原因,它不会以这种方式发送post数据。您是否看到服务器端的请求?你能发布完整的请求吗?
RequestBody body = RequestBody.create(MediaType.get("application/x-www-form-urlencoded"), "key1=value1&key2=value2");

Request request = new Request.Builder()
.url(url)
.post(body)
.build();