码迷,mamicode.com
首页 > Windows程序 > 详细

三套API实现发送GET、POST请求给服务器

时间:2016-01-07 16:42:19      阅读:291      评论:0      收藏:0      [点我收藏+]

标签:

1.     使用URL类实现发请求给服务器:

1.1.  Get方式的请求:

//注意: 此处 get 方式的请求, 如果带过去的请求参数 有 中文字符, 那么需要进行
//url 编码 , 否则是带不过去的 .
//number=%E7%90%83%E7%90%83
number= URLEncoder.encode(number, "UTF-8");
path = path+"?number="+number+"&password="+password;
URL url = new URL(path);

 

get方式时:服务端要解决乱码, 需要手动的进行 解码

String encodeValue = URLEncoder.encode(number, "ISO8859-1");

number = URLDecoder.decode(encodeValue, "UTF-8");

1.2.  Post方式的请求:

URL url = new URL(path);

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

conn.setConnectTimeout(5000);

//使用 post 方式
conn.setRequestMethod("POST");

//number=%E5%B0%8F%E9%8A%AE&password=sdfds
//post请求时, 中文数据也需要进行 URL 编码

//这里需要 将 number的中文值, 进行 url 编码
number = URLEncoder.encode(number, "UTF-8");
System.out.println(number);
String params = "number="+number+"&password="+password;

//设置必要的请求的头的信息
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty("Content-Length", params.length()+"");

//将参数 params 以流的形式 写给 服务器

//加一个 标志, 表示 要向 服务器 写数据了
conn.setDoOutput(true);
conn.getOutputStream().write(params.getBytes());

int code = conn.getResponseCode();

 

Post方式 ,只需要一行代码搞定

//post是 解决乱码 // 这个代码只对post 有效, 因为覆盖的 请求体中的数据的 解码 使用到的编码集

      request.setCharacterEncoding("utf-8");

 

2.     Apache的面向对象的api实现发送请求:

2.1:   get方式:

这套 api , 谷歌工程师已经集成 到 android 中去了. 所以可以直接拿过来用

// http://188.188.4.100:8080/day06_android/login?number=110&password=123


number =URLEncoder.encode(number, "UTF-8");
path = path+"?number="+number+"&password="+password;

//相当于打开了一个 浏览器客户端
HttpClient client = new DefaultHttpClient();

//get方式的请求
HttpGet get = new HttpGet(path);

//获得的响应 对象
HttpResponse response = client.execute(get);

//获得状态行对象,然后再 获得状态行中的状态码
int code = response.getStatusLine().getStatusCode();

if(code==200){

//获得响应体, 获得响应体中的 流的数据
//接下来的代码跟之前一样的
InputStream in = response.getEntity().getContent();

String value = StreamTool.decodeStream(in);

 

2.2: post方式

HttpClient client = new DefaultHttpClient();

// http://188.188.4.100:8080/day06_android/login
HttpPost post = new HttpPost(path);

//两个键值对
NameValuePair pair1=new BasicNameValuePair("number", number);
NameValuePair pair2=new BasicNameValuePair("password", password);

//把两个键值对 放到 list 中去, 然后再 把 list 放入到 实体中
List<NameValuePair> list = new ArrayList<NameValuePair>();

list.add(pair1);
list.add(pair2);

//这里传 了 UTF-8 就可以将数据 编码后带过去 了
post.setEntity(new UrlEncodedFormEntity(list,"UTF-8"));

HttpResponse response = client.execute(post);

//获得状态行对象,然后再 获得状态行中的状态码
int code = response.getStatusLine().getStatusCode();

 

3     使用开源框架使用发送请求:

去github上下载搜索async http ,下载把com文件放到工程目录下就可以用了,它使用的是AsyncHttpClient这个api

3.1:   get方式:

path = path+"?number="+number+"&password="+password;
AsyncHttpClient client = new AsyncHttpClient();

client.get(path, new AsyncHttpResponseHandler(){

//访问 网络时, 服务器成功的处理了客户端的请求时 会被调用
@Override
public void onSuccess(int statusCode, Header[] headers,
byte[] responseBody) {

Toast.makeText(MainActivity.this, "登录的结果是 : " + new String(responseBody), 0).show();
}

//访问 网络时, 请求失败会调用
@Override
public void onFailure(int statusCode, Header[] headers,
byte[] responseBody, Throwable error) {

Toast.makeText(MainActivity.this, "对不起, 服务器无响应 ... ", 0).show();
}
});

3.2: post方式

AsyncHttpClient client = new AsyncHttpClient();

RequestParams params = new RequestParams();
params.add("number", number);
params.add("password", password);

client.post(path, params,new AsyncHttpResponseHandler(){

//访问 网络时, 服务器成功的处理了客户端的请求时 会被调用
@Override
public void onSuccess(int statusCode, Header[] headers,
byte[] responseBody) {

Toast.makeText(MainActivity.this, "post 登录的结果是 : " + new String(responseBody), 0).show();
}

//访问 网络时, 请求失败会调用
@Override
public void onFailure(int statusCode, Header[] headers,
byte[] responseBody, Throwable error) {

Toast.makeText(MainActivity.this, "对不起, 服务器无响应 ... ", 0).show();
}
});

 

三套API实现发送GET、POST请求给服务器

标签:

原文地址:http://www.cnblogs.com/MarsDabiaoge/p/5110100.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!