android封装post请求,包含header cookie data
时间: 2024-03-15 15:46:07 浏览: 65
要封装一个包含 Header、Cookie 和 Data 的 Post 请求,你可以使用 Android 系统自带的 HttpURLConnection 类或者第三方库 OkHttp。
以下是使用 HttpURLConnection 封装 Post 请求的示例代码:
```java
public static String post(String urlString, String data, Map<String, String> headers, String cookie) throws IOException {
URL url = new URL(urlString);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setConnectTimeout(5000);
conn.setReadTimeout(5000);
conn.setDoOutput(true);
conn.setDoInput(true);
// 设置 Header
if (headers != null && !headers.isEmpty()) {
for (Map.Entry<String, String> entry : headers.entrySet()) {
conn.setRequestProperty(entry.getKey(), entry.getValue());
}
}
// 设置 Cookie
if (cookie != null && !cookie.isEmpty()) {
conn.setRequestProperty("Cookie", cookie);
}
// 写入请求数据
OutputStream os = conn.getOutputStream();
os.write(data.getBytes());
os.flush();
os.close();
// 读取响应数据
InputStream is = conn.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder response = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
response.append(line);
}
reader.close();
is.close();
conn.disconnect();
return response.toString();
}
```
使用该方法时,需要传入以下参数:
- urlString:请求的 URL 地址;
- data:请求的数据,可以是 JSON 字符串等;
- headers:请求的 Header,可以为空;
- cookie:请求的 Cookie,可以为空。
示例代码中使用了字节流和字符流进行数据的写入和读取,可以根据实际情况选择使用哪种方式。
如果你使用 OkHttp 库来进行网络请求,也可以类似的方式设置 Header、Cookie 和请求数据。以下是使用 OkHttp 库封装 Post 请求的示例代码:
```java
public static String post(String urlString, String data, Map<String, String> headers, String cookie) throws IOException {
OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(5, TimeUnit.SECONDS)
.readTimeout(5, TimeUnit.SECONDS)
.build();
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), data);
Request.Builder builder = new Request.Builder()
.url(urlString)
.post(requestBody);
// 设置 Header
if (headers != null && !headers.isEmpty()) {
for (Map.Entry<String, String> entry : headers.entrySet()) {
builder.addHeader(entry.getKey(), entry.getValue());
}
}
// 设置 Cookie
if (cookie != null && !cookie.isEmpty()) {
builder.addHeader("Cookie", cookie);
}
Request request = builder.build();
Response response = client.newCall(request).execute();
String result = response.body().string();
response.close();
return result;
}
```
使用该方法时,需要传入以下参数:
- urlString:请求的 URL 地址;
- data:请求的数据,可以是 JSON 字符串等;
- headers:请求的 Header,可以为空;
- cookie:请求的 Cookie,可以为空。
示例代码中使用了 OkHttp 库的 RequestBody 和 Request.Builder 类来设置请求数据和 Header,也可以根据实际情况选择使用其他方式设置。
阅读全文