您的位置:首页 > 理论基础 > 计算机网络

《老罗Android》学习之HTTP (三) POST提交数据

2014-05-18 23:22 253 查看
1.  POST提交数据

   示例:客户端 post方式 提交用户和密码.  服务器端判断是否正确,做出处理.


1) 建立Java Project.

2)   工程目录下新建目录/libs,把工具包拷贝到该目录下,选中包右键--->Build path--->configure build path.

3)   /src下新建一个包com.http.get,包下新建一个工具类文件 HttpUtil.java.
public class HttpUtil {
// 请求服务器端的url
private static String PATH = "http://192.168.1.105:8080/MyHTTP/LonginServlet";
private static URL url;
public HttpUtil() {
}
static {
try {
url = new URL(PATH);
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

/**
* @param params
*            填写的url的参数
* @param encode
*            字节编码
* @return
*/
public static String sendPostMessage(Map<String, String> params,
String encode) {
// 作为StringBuffer初始化的字符串
StringBuffer buffer = new StringBuffer();
try {
if (params != null && !params.isEmpty()) {
for (Map.Entry<String, String> entry : params.entrySet()) {
// 完成转码操作
buffer.append(entry.getKey()).append("=").append(
URLEncoder.encode(entry.getValue(), encode)).append("&");
}
buffer.deleteCharAt(buffer.length() - 1); // 删除掉最有一个&
}
System.out.println("-->>"+buffer.toString());
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setConnectTimeout(3000);
urlConnection.setRequestMethod("POST");
urlConnection.setDoInput(true);// 表示从服务器获取数据
urlConnection.setDoOutput(true);// 表示向服务器写数据
// 获得上传信息的字节大小以及长度
byte[] mydata = buffer.toString().getBytes();
// 表示设置请求体的类型是文本类型
urlConnection.setRequestProperty("Content-Type",
"application/x-www-form-urlencoded");
urlConnection.setRequestProperty("Content-Length",
String.valueOf(mydata.length));
// 获得输出流,向服务器输出数据
OutputStream outputStream = urlConnection.getOutputStream();
outputStream.write(mydata,0,mydata.length); //把本地数据写到流中
outputStream.close();
// 获得服务器响应的结果和状态码
int responseCode = urlConnection.getResponseCode();
if (responseCode == 200) {
return changeInputStream(urlConnection.getInputStream(), encode);
}
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "";
}
/**
* 将一个输入流转换成指定编码的字符串
*
* @param inputStream
* @param encode
* @return
*/
private static String changeInputStream(InputStream inputStream,
String encode) {
// TODO Auto-generated method stub
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
byte[] data = new byte[1024];
int len = 0;
String result = "";
if (inputStream != null) {
try {
while ((len = inputStream.read(data)) != -1) {
outputStream.write(data, 0, len);
}
result = new String(outputStream.toByteArray(), encode);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return result;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Map<String, String> params = new HashMap<String, String>();
params.put("username", "admin");
params.put("password", "123");
String result = HttpUtil.sendPostMessage(params, "utf-8");
System.out.println("--result->>" + result);
}
}

4)  开户 MyHTTP web项目的服务器。 就会输出  登录成功的字符串。

entrySet(): entry 可以将它理解为一个对象,有key和value俩个属性,可以通过getKey()获得key值,也可以通过getValue()获得value值;

2  使用apache工具类提交数据

示例二:客户端 post方式 提交用户和密码.  服务器端判断是否正确,做出处理.

1) 建立Java Project.

2)   工程目录下新建目录/libs,把工具包拷贝到该目录下,选中包右键--->Build path--->configure build path.

3)   /src下新建一个包com.http.get,包下新建一个工具类文件 HttpUtil.java.
public class HttpUtils {
public HttpUtils() {
}
public static String sendHttpClientPost(String path,
Map<String, String> map, String encode) {
List<NameValuePair> list = new ArrayList<NameValuePair>();
if (map != null && !map.isEmpty()) {
for (Map.Entry<String, String> entry : map.entrySet()) {
list.add(new BasicNameValuePair(entry.getKey(), entry
.getValue()));
}
}
try {
// 实现将请求的参数封装到表单中,请求体中
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(list, encode);
// 使用Post方式提交数据
HttpPost httpPost = new HttpPost(path);
httpPost.setEntity(entity);
// 执行post请求
DefaultHttpClient client = new DefaultHttpClient();
HttpResponse httpResponse = client.execute(httpPost);
if (httpResponse.getStatusLine().getStatusCode() == 200) {
return changeInputStream(httpResponse.getEntity().getContent(),
encode);
}
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "";
}
/**
* 将一个输入流转换成指定编码的字符串
*
* @param inputStream
* @param encode
* @return
*/
public static String changeInputStream(InputStream inputStream,
String encode) {
// TODO Auto-generated method stub
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
byte[] data = new byte[1024];
int len = 0;
String result = "";
if (inputStream != null) {
try {
while ((len = inputStream.read(data)) != -1) {
outputStream.write(data, 0, len);
}
result = new String(outputStream.toByteArray(), encode);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return result;
}

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String path = "http://192.168.1.105:8080/MyHTTP/LonginServlet";
Map<String, String> params = new HashMap<String, String>();
params.put("username", "admin");
params.put("password", "123");
String result = HttpUtils.sendHttpClientPost(path, params, "utf-8");
System.out.println("-->>"+result);
}
}

与上一个示例,封装方法不一样。

浅论Android网络请求库——android-async-http

快速Android开发系列网络篇之Android-Async-Http
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: