在我们提交数据到服务器进行怎家、修改、删除等操作,都是Post
操作。我们在网页上提交表单进行登录的场景就是典型的Post
操作。
Post() 方法
okhttp3
库也支持Post
操作,调用API
属于Get
操作。不同的是Post
操作时数据不是放在URL
中的,而是放在表单提交中的。
所以程序的实现需要构建一个ForBody
表单对象,用于放置表单数据。
核心代码:
Builder builder = new FormBody.Builder();
// 设置数据,第一个参数是数据名,第二个参数是数据值。
builder.add("", "");
FormBody formbody = builder.build();
Request request = new Request.Builder().url(url).post(formbody).build();
整体步骤与请求
API
类似,不同的是在构建Request
对象时,使用.post(formbody)
语句来放入表单对象,表示执行Post
操作。
源码:
import java.io.IOException;
import java.util.Map;
import java.util.HashMap;
import okhttp3.Call;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.FormBody;
import okhttp3.FormBody.Builder;
public class FormPoster {
/**
* 向指定的 url 提交数据
*/
public String postContent(String url, Map<String, String> formData) {
// okHttpClient 实例
OkHttpClient okHttpClient = new OkHttpClient();
//post方式提交的数据
Builder builder = new FormBody.Builder();
// 放入表单数据
for (String key : formData.keySet()) {
builder.add(key, formData.get(key));
}
// 构建 FormBody 对象
FormBody formBody = builder.build();
// 指定 post 方式提交FormBody
Request request = new Request.Builder().url(url).post(formBody).build();
// 使用client去请求
Call call = okHttpClient.newCall(request);
// 返回结果字符串
String result = null;
try {
// 获得返回结果
result = call.execute().body().string();
} catch (IOException e) {
// 抓取异常
System.out.println("request " + url + " error . ");
e.printStackTrace();
}
return result;
}
public static void main(String[] args) {
String url = "https://gitee.com/login";
Map<String, String> formData = new HashMap();
formData.put("user[login]", "17177466748");
FormPoster poster = new FormPoster();
String content = poster.postContent(url, formData);
System.out.println("API调用结果");
System.out.println(content);
}
}
将发送表单数据的过程,封装为
postContent()
方法,方便重用。重点是理解使用FormBody
对象的实例来存放表单数据。