android http2.0请求,Android http HttpURLConnection

该代码段展示了Java中处理HTTP GET和POST请求的方法。在GET请求中,它构建URL,设置超时,读取响应并处理错误。POST请求则涉及设置请求方式,发送数据,处理响应输入流。代码中还包括了错误处理和日志记录。
摘要由CSDN通过智能技术生成

/**

* Http get 请求

*

* @param urlPath

*

*

*/

private static String httpConnByGet(RequestUrl ru,Params params){

String token = (String) params.getMap().get("token") ;

String et = (String) params.getMap().get("et") ;

params.getMap().remove("et");

if(token != null ){

params.getMap().put("token",Md5.md5(token + et + params.getMap().get("uid") + ru.getKeywords()));

}

String urlPath = ru.getUrl() + HttpURLConstant.QMARK + HttpURLConstant.COMMON_PARAMS + et + params.toString() ; //通用参数的设置

Log.w("NETURL","geturl:"+urlPath);

URL url = null;

HttpURLConnection urlConnection = null;

try {

ByteArrayOutputStream outStream = new ByteArrayOutputStream();

byte[] data = new byte[2048];    //应该不会小吧!

int len = 0;

url = new URL(urlPath);

urlConnection = (HttpURLConnection) url.openConnection();

//   Class> clazz=url.openConnection().getClass();  //看看返回什么鬼类型

//   Class> clazzSuper=clazz.getSuperclass();       //父类又是什么鬼啊!

//getInputStream暗中执行了连接,不需要urlConnection.connect();

urlConnection.setReadTimeout(readTimeout);                                                  // 设置请求的超时时间

urlConnection.setConnectTimeout(connectTimeout);

if (urlConnection.getResponseCode() == HttpURLConnection.HTTP_OK) {

InputStream inStream = urlConnection.getInputStream();   //获取输入流,此时才真正建立链接

while ((len = inStream.read(data)) != -1) {

outStream.write(data, 0, len);

}

inStream.close();

if(isDebug){Log.e(TAG,"get 返回数据"+new String(outStream.toByteArray()));}

return new String(outStream.toByteArray());

}else{ //返回的是HTTP的错误码,不是我们自己定义的错误码!

//处理一下http的错误返回码

Log.e(TAG,"get 网络连接失败"+urlConnection.getResponseCode());

return "HTTP_ERROR-"+urlConnection.getResponseCode();

}

} catch (MalformedURLException e) {

e.printStackTrace();

Log.e(TAG,"MalformedURLException e");

} catch (IOException e) {

e.printStackTrace();

Log.e(TAG,"IOException e");

} finally{

if(urlConnection!=null){

urlConnection.disconnect();  //总是需要关闭的吧!

}

}

return null;

}

/**

* Http Post 请求

*

* @param urlpath

* @param paramsDatas

*/

private static String httpConnByPost(RequestUrl ru,Params params) {

String token = (String) params.getMap().get("token") ;

String et = (String) params.getMap().get("et") ;

params.getMap().remove("et");

if(token != null ){

params.getMap().put("token", Md5.md5(token + et + params.getMap().get("uid") + ru.getKeywords()));

}

URL url = null;                                                       // 根据地址创建URL对象

HttpURLConnection urlConnection = null;                               // 根据URL对象打开链接

try {

url = new URL(ru.getUrl());                                                          // 根据地址创建URL对象

urlConnection = (HttpURLConnection) url.openConnection();                            // 根据URL对象打开链接

urlConnection.setRequestMethod("POST");                                               // 设置请求的方式

urlConnection.setReadTimeout(readTimeout);                                            // 设置请求的超时时间

urlConnection.setConnectTimeout(connectTimeout);

String paramsData = HttpURLConstant.COMMON_PARAMS + et + params.toString();           //通用参数的使用要注意

Log.w("NETURL",url+"?"+paramsData);

urlConnection.setRequestProperty("Connection", "keep-alive");                         // 设置维持长连接

urlConnection.setRequestProperty("Content-Type","application/x-www-form-urlencoded"); // 设置文件的类型

urlConnection.setRequestProperty("Content-Length",String.valueOf(paramsData.getBytes().length)); // 设置数据的长度

urlConnection.setRequestProperty("User-Agent","Devond_Watch,Android-device.");  // ???

urlConnection.setDoOutput(true);   // 发送POST请求必须设置允许输出

urlConnection.setDoInput(true);    // 发送POST请求必须设置允许输入,setDoInput的默认值就是true

urlConnection.setUseCaches(false); // 为安全,不允许使用缓存

urlConnection.connect();           //urlConnection.getInputStream()的时候会自动的打开连接的

OutputStream os = urlConnection.getOutputStream();    //获取输出流developer

os.write(paramsData.getBytes());

os.flush();

if (urlConnection.getResponseCode() == HttpURLConnection.HTTP_OK) {

InputStream is = urlConnection.getInputStream();          // 获取响应的输入流对象

ByteArrayOutputStream baos = new ByteArrayOutputStream(); // 创建字节输出流对象

int len = 0;                                              // 定义读取的长度

byte buffer[] = new byte[2048];                           // 定义缓冲区

while ((len = is.read(buffer)) != -1) {                   // 按照缓冲区的大小,循环读取

baos.write(buffer, 0, len);                           // 根据读取的长度写入到os对象中

}

is.close();// 释放资源

baos.close();

final String result = new String(baos.toByteArray());

if(isDebug){

Log.e(TAG,"Post返回的数据:"+result);

}

return new String(baos.toByteArray());

}else{ //返回的是HTTP的错误码,不是我们自己定义的错误码!

//处理一下http的错误返回码

Log.e(TAG,urlConnection.getResponseCode()+"#Post 网络连接失败#"+urlConnection.getErrorStream());

return "HTTP_ERROR-"+urlConnection.getResponseCode();

}

} catch (MalformedURLException e) {

e.printStackTrace();

Log.e(TAG,"MalformedURLException e");

}catch (Exception e) {

e.printStackTrace();

}finally{

if(urlConnection!=null){

urlConnection.disconnect();

}

}

Log.e(TAG,"Post 请求返回为空");

return null;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值