android json实现网络请求 和普通的http请求 还有https请求安全认证

android 实现http请求很多种,和服务器对接需要了解

在 Android 下,Android SDK 已经为我们封装好了整个与 JSON 有关的操作,使用非常方便

直接上代码

/**

* 发送 http 请求

*

* @param url

*/

@SuppressLint("DefaultLocale")

public int httpResponseCodeJsonPost(String strUrl, String authorization,

String currentSessionId, String ClientId,

PostParameter[] postParams, String httpMethod)

throws SystemException {

int responseCode = -1;

try {

HttpPost request = new HttpPost(strUrl);

JSONObject param = new JSONObject();

for (int j = 0; j < postParams.length; j++) {

param.put(postParams[j].name,

postParams[j].value);//设置参数

}

try {

StringEntity se = new StringEntity(param.toString(),"utf-8");//防止乱码

request.setEntity(se);

} catch (UnsupportedEncodingException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

request.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 5000);

request.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 5000);//设置超时

request.setHeader("X-FBox-Session", currentSessionId);

request.setHeader("Authorization", authorization);//设置各种头

request.setHeader("X-FBox-ClientId", ClientId);

request.setHeader("Content-Type",

"application/json;charset=UTF-8");

// 发送请求

try {

HttpResponse httpResponse = new DefaultHttpClient()

.execute(request);

//String retSrc = EntityUtils.toString(httpResponse.getEntity());  //返回结果

responseCode = httpResponse.getStatusLine().getStatusCode();//返回状态

} catch (ClientProtocolException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

} catch (JSONException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return responseCode;

}

这里基本包括了全部过程。和一些考虑乱码问题。

下面一段是普通的http请求

/**

* 发送 http 请求

*

* @param url

*/

@SuppressLint("DefaultLocale")

public int httpResponseCode(String strUrl, String authorization,

String currentSessionId, String ClientId,

PostParameter[] postParams, String httpMethod)

throws SystemException {

int retriedCount;

int retry = 1;

Response res = null;

int responseCode = -1;

for (retriedCount = 0; retriedCount < retry; retriedCount++) {

try {

HttpURLConnection con = null;

OutputStream osw = null;

URL url = new URL(strUrl);

try {

con = (HttpURLConnection) url.openConnection();

con.setDoInput(true);

con.setRequestProperty("Authorization", authorization);

con.addRequestProperty("X-FBox-ClientId", ClientId);

setHeaders(strUrl, postParams, con, httpMethod);

if ("POST".equals(httpMethod) || "PUT".equals(httpMethod)) {// null

// 将当前HTTP请求方式设置为"POST"

con.setRequestMethod(httpMethod);

// 参数值为true时决定着当前链接可以进行数据提交工作

con.setRequestProperty("Content-Type",

"application/x-www-form-urlencoded");

con.setDoOutput(true);

String postParam = "";

if (postParams != null) {

postParam = encodeParameters(postParams);

}

byte[] bytes = postParam.getBytes("UTF-8");

// 设置文件长度

con.setRequestProperty("Content-Length",

Integer.toString(bytes.length));

osw = con.getOutputStream();

osw.write(bytes);

osw.flush();

osw.close();

} else {

con.setRequestMethod(httpMethod);

}

con.setConnectTimeout(this.connectionTimeout);

con.setReadTimeout(this.readTimeout);

res = new Response(con);

responseCode = con.getResponseCode();

} finally {

try {

osw.close();

} catch (Exception ignore) {

}

}

} catch (IOException ioe) {

// connection timeout or read timeout

if (retriedCount == 1) {// retryCount

throw new SystemException(ioe.getMessage(), ioe,

responseCode);

}

}

}

return responseCode;

}

这是  application/x-www-form-urlencoded 类型的请求方式。

这里只是普通的请求http

有时候我们遇到https请求那只要加上下面的

if (url.getProtocol().toLowerCase().equals("https")) {

trustAllHosts();//信任所有

HttpsURLConnection https = (HttpsURLConnection) url

.openConnection();

https.setHostnameVerifier(DO_NOT_VERIFY);

con = https;

} else {

con = (HttpURLConnection) url.openConnection();

}

/**

* 信任所有主机-对于任何证书都不做检查

*/

@SuppressLint("TrulyRandom")

private static void trustAllHosts() {

// Create a trust manager that does not validate certificate chains

// Android 采用X509的证书信息机制

TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {

public java.security.cert.X509Certificate[] getAcceptedIssuers() {

return new java.security.cert.X509Certificate[] {};

}

public void checkClientTrusted(X509Certificate[] chain,

String authType) throws CertificateException {

}

public void checkServerTrusted(X509Certificate[] chain,

String authType) throws CertificateException {

}

} };

// Install the all-trusting trust manager

try {

SSLContext sc = SSLContext.getInstance("TLS");

sc.init(null, trustAllCerts, new java.security.SecureRandom());

HttpsURLConnection

.setDefaultSSLSocketFactory(sc.getSocketFactory());

} catch (Exception e) {

e.printStackTrace();

}

}

这样就可以访问有证书的https请求

时间: 2024-10-07 05:45:51

android json实现网络请求 和普通的http请求 还有https请求安全认证的相关文章

Android系列之网络(三)----使用HttpClient发送HTTP请求(分别通过GET和POST方法发送数据)

[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4006009.html 联系方式:[email protected] [系列]Android系列之网络:(持续更新) Android系列之网络(一)----使用HttpClient发送HTTP请求(通过get方法获取数据) Android系列之网络(二)----HTTP请求头与响应头 Android

python——请求服务器(http请求和https请求)

一.http请求 1.http请求方式:get和post get一般用于获取/查询资源信息,在浏览器中直接输入url+请求参数点击enter之后连接成功服务器就能获取到的内容,post请求一般用于更新资源,通过form表单或者json.xml等其他形式提交给服务器端,然后等待服务器端给返回一个结果的方式(这个返回结果一般就是被修改之后的是否成功的状态,或者是修改后的最新数据table等). http请求,不论是get还是post请求,都会包含几个部分,分别是header,cookie,get会有

Android系列之网络(一)----使用HttpClient发送HTTP请求

[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4004983.html 联系方式:[email protected] 一.HTTP协议初探: HTTP(Hypertext Transfer Protocol)中文 “超文本传输协议”,是一种为分布式,合作式,多媒体信息系统服务,面向应用层的协议,是Internet上目前使用最广泛的应用层协议,它基

Android系列之网络(二)----HTTP请求头与响应头

?[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4005034.html 联系方式:[email protected] [正文] 国庆佳节,习惯并享受着一个人独霸整个教研室的感觉. 在上一篇文章中,我们学习到了如何使用HttpClient发送HTTP请求.博文链接: Android系列之网络(一)----使用HttpClient发送HTTP请求

Android系列之网络(四)----SAX方式解析XML数据

?[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4044170.html 联系方式:[email protected] [系列]Android系列之网络:(持续更新) Android系列之网络(一)----使用HttpClient发送HTTP请求(通过get方法获取数据) Android系列之网络(二)----HTTP请求头与响应头 Androi

Fiddler抓取https请求 &amp; Fiddler抓包工具常用功能详解

大家好,我是TT,互联网测试行业多年,没有牛逼的背景,也没有什么可炫耀的,唯独比他人更努力,在职场打拼.遇到过的坑,走过的弯路,愿意与大家分享,分享自己的经验,少走弯路.首发于个人公众号[测试架构师] 原文如下: 先来看一个小故事: 小T在测试APP时,打开某个页面展示异常,于是就跑到客户端开发小A那里说:"你这个页面做的有问题,页面展示异常":小A说:"这哪是我的问题,你去找后台吧,后台接口返回数据有问题":小T就屁颠屁颠的跑到后台接口开发小M那里说:"

fiddler抓取HTTPS请求

Https即 Http over ssl,使用ssl加密传输数据,Http是明文传输数据的,所以Https必然比Http更安全.即使传输数据被劫持,劫持者也无法获取传输明文.从而保证了系统的安全性,尤其对于交易支付类业务来说,https的安全性尤为重要. 作为测试免不了会使用工具抓取请求,但是fiddler默认置灰抓取http请求,那么如何抓取HTTPS请求呢,下面根据自己的使用总结一下如何使用fiddler抓取HTTPS请求: 前置:fiddler可以抓取http请求 一.fiddler如何抓

Charles抓包手机请求和Https请求

1.打开Charles,在Proxy里面点击Proxy Settings 2.在Proxy Settings的 Proxies添加端口 3.设置手机WLAN(注意Charles和手机连接的WIFi需在同一局域网) 4.长按连接的WIFI,出现修改网络,点击修改网络,点击显示高级选项 5.点击代理,选择手动 6.填写代理服务主机名(Charles安装电脑的ip)和代理服务器端口(Proxies添加端口),代理服务器端口需要和Proxies添加端口一致 7.以上为设置手机代理的步骤,设置成功后,如果

charles录制https请求

之前一直用windows系统,抓包什么的都是用的fiddler或者wireshark,操作比较简单,扩展性也比较强,现在因为工作原因换了mac,在网上一直没有找到fiddler的mac版本,就只能切换到charles了,虽然工具都大同小异,由于刚换了操作系统,有换工具,着实有点不怎么适应. 下面记录下本地配置charles录制https请求的过程. charles录制https请求,以mac系统,火狐浏览器为例,记录配置过程. 1.charles安装根证书, help-->SSL proxyin