设为首页 加入收藏

TOP

Android中POST方式发送HTTP请求(一)
2015-08-31 21:23:56 来源: 作者: 【 】 浏览:101
Tags:Android POST 方式 发送 HTTP 请求

步骤:


1.构造URL


URL url = new URL(PATH);


2.设置连接


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


? ? ? connection.setConnectTimeout(3000);


? ? ? connection.setDoInput(true);//表示从服务器获取数据


? ? ? connection.setDoOutput(true);//表示向服务器写数据


? ? ? //获得上传信息的字节大小以及长度


? ? ? connection.setRequestMethod("POST");


? ? ? //是否使用缓存


? ? ? connection.setUseCaches(false);


? ? ? //表示设置请求体的类型是文本类型


? ? ? connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");


? ? ?


? ? ? connection.setRequestProperty("Content-Length", String.valueOf(mydata.length));


? ? ? connection.connect();?


3.写入请求正文


Map params = new HashMap();


params.put("username", "lili");


params.put("password", "123");


StringBuffer buffer = new StringBuffer();


try {//把请求的主体写入正文!!


?if(params != null&&!params.isEmpty()){


//迭代器


? for(Map.Entry entry : params.entrySet()){


? buffer.append(entry.getKey()).append("=").


? append(URLEncoder.encode(entry.getValue(),encode)).


? append("&");


? }


}


//? System.out.println(buffer.toString());


? //删除最后一个字符&,多了一个;主体设置完毕


? buffer.deleteCharAt(buffer.length()-1);


? byte[] mydata = buffer.toString().getBytes();


//获得输出流,向服务器输出数据


? ? ? OutputStream outputStream = connection.getOutputStream();


? ? ? ? ? outputStream.write(mydata,0,mydata.length);


4.读取返回数据,关闭连接


//通常叫做内存流,写在内存中的


ByteArrayOutputStream outputStream = new ByteArrayOutputStream();


byte[] data = new byte[1024];


int len = 0;


String result = "";


if(inputStream != null){


try {


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


data.toString();


?


outputStream.write(data, 0, len);


}


//result是在服务器端设置的doPost函数中的


result = new String(outputStream.toByteArray(),encode);


outputStream.flush();


下面上代码:一个简单的Demo访问一个自建的Servlet:


package com.http.post;?


import java.io.ByteArrayOutputStream;?


import java.io.IOException;?


import java.io.InputStream;?


import java.io.OutputStream;?


import java.io.UnsupportedEncodingException;?


import java.net.HttpURLConnection;?


import java.net.MalformedURLException;?


import java.net.URL;?


import java.net.URLEncoder;?


import java.util.HashMap;?


import java.util.Map;?


public class HttpUtils {?


? ? private static String PATH = "http://172.24.87.47:8088/myhttp/servlet/LoginAction";?


? ? private static URL url;?


? ? public HttpUtils() {?


? ? ? ? // TODO Auto-generated constructor stub?


? ? }?


? ? 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 params,String encode){?


? ? ? ? StringBuffer buffer = new StringBuffer();?


? ? ? ? try {//把请求的主体写入正文!!?


? ? ? ? ? ? if(params != null&&!params.isEmpty()){?


? ? ? ? ? ? ? ? //迭代器?


? ? ? ? ? ? ? for(Map.Entry entry : params.entrySet()){?


? ? ? ? ? ? ? ? ? buffer.append(entry.getKey()).append("=").?


? ? ? ? ? ? ? ? ? append(URLEncoder.encode(entry.getValue(),encode)).?


? ? ? ? ? ? ? ? ? append("&");?


? ? ? ? ? ? ? }?


? ? ? ? ? ? }?


//? ? ? ? ? ? System.out.println(buffer.toString());?


? ? ? ? ? ? ? //删除最后一个字符&,多了一个;主体设置完毕?


? ? ? ? ? ? ? buffer.deleteCharAt(buffer.length()-1);?


? ? ? ? ? ? ? byte[] mydata = buffer.toString().getBytes();?


? ? ? ? ? ? ? HttpURLConnection connection = (HttpURLConnection) url.openConnection();?


? ? ? ? ? ? ? connection.setConnectTimeout(3000);?


? ? ? ? ? ? ? connection.setDoInput(tru

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇利用Phoenix代理进行P2P WebRTC开.. 下一篇C#/iOS/Android通用加密解密方法

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: