android cookie读写,如何在Android上使用Cookie发出http请求?

由于不建议使用Apache库,因此对于那些想使用的人HttpURLConncetion,我编写了此类,以借助以下答案发送Get和Post Request :

public class WebService {

static final String COOKIES_HEADER = "Set-Cookie";

static final String COOKIE = "Cookie";

static CookieManager msCookieManager = new CookieManager();

private static int responseCode;

public static String sendPost(String requestURL, String urlParameters) {

URL url;

String response = "";

try {

url = new URL(requestURL);

HttpURLConnection conn = (HttpURLConnection) url.openConnection();

conn.setReadTimeout(15000);

conn.setConnectTimeout(15000);

conn.setRequestMethod("POST");

conn.setRequestProperty("Content-Type", "application/json; charset=utf-8");

if (msCookieManager.getCookieStore().getCookies().size() > 0) {

//While joining the Cookies, use ',' or ';' as needed. Most of the server are using ';'

conn.setRequestProperty(COOKIE ,

TextUtils.join(";", msCookieManager.getCookieStore().getCookies()));

}

conn.setDoInput(true);

conn.setDoOutput(true);

OutputStream os = conn.getOutputStream();

BufferedWriter writer = new BufferedWriter(

new OutputStreamWriter(os, "UTF-8"));

if (urlParameters != null) {

writer.write(urlParameters);

}

writer.flush();

writer.close();

os.close();

Map> headerFields = conn.getHeaderFields();

List cookiesHeader = headerFields.get(COOKIES_HEADER);

if (cookiesHeader != null) {

for (String cookie : cookiesHeader) {

msCookieManager.getCookieStore().add(null, HttpCookie.parse(cookie).get(0));

}

}

setResponseCode(conn.getResponseCode());

if (getResponseCode() == HttpsURLConnection.HTTP_OK) {

String line;

BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));

while ((line = br.readLine()) != null) {

response += line;

}

} else {

response = "";

}

} catch (Exception e) {

e.printStackTrace();

}

return response;

}

// HTTP GET request

public static String sendGet(String url) throws Exception {

URL obj = new URL(url);

HttpURLConnection con = (HttpURLConnection) obj.openConnection();

// optional default is GET

con.setRequestMethod("GET");

//add request header

con.setRequestProperty("User-Agent", "Mozilla");

/*

* https://stackoverflow.com/questions/16150089/how-to-handle-cookies-in-httpurlconnection-using-cookiemanager

* Get Cookies form cookieManager and load them to connection:

*/

if (msCookieManager.getCookieStore().getCookies().size() > 0) {

//While joining the Cookies, use ',' or ';' as needed. Most of the server are using ';'

con.setRequestProperty(COOKIE ,

TextUtils.join(";", msCookieManager.getCookieStore().getCookies()));

}

/*

* https://stackoverflow.com/questions/16150089/how-to-handle-cookies-in-httpurlconnection-using-cookiemanager

* Get Cookies form response header and load them to cookieManager:

*/

Map> headerFields = con.getHeaderFields();

List cookiesHeader = headerFields.get(COOKIES_HEADER);

if (cookiesHeader != null) {

for (String cookie : cookiesHeader) {

msCookieManager.getCookieStore().add(null, HttpCookie.parse(cookie).get(0));

}

}

int responseCode = con.getResponseCode();

BufferedReader in = new BufferedReader(

new InputStreamReader(con.getInputStream()));

String inputLine;

StringBuffer response = new StringBuffer();

while ((inputLine = in.readLine()) != null) {

response.append(inputLine);

}

in.close();

return response.toString();

}

public static void setResponseCode(int responseCode) {

WebService.responseCode = responseCode;

Log.i("Milad", "responseCode" + responseCode);

}

public static int getResponseCode() {

return responseCode;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要封装一个包含 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,也可以根据实际情况选择使用其他方式设置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值