Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / Android中POST方式发送HTTP请求

Android中POST方式比Get方式要复杂一点,因为该方式需要将请求的参数放在http请求的正文中,所以需要构造请求体。在Android用Get方式发送http请求  http://www.linuxidc.com/Linux/2015-08/121970.htm步骤:1.构造URLURL 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<String, String> params = new HashMap<String, String>();params.put("username", "lili");params.put("password", "123");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("&");  }}// 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<String, String> params,String encode){         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("&");               }             } //            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(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(); //连接,不写也可以。。??有待了解                            //获得输出流,向服务器输出数据               OutputStream outputStream = connection.getOutputStream();                  outputStream.write(mydata,0,mydata.length);                  //获得服务器响应的结果和状态码               int responseCode = connection.getResponseCode();                if(responseCode == HttpURLConnection.HTTP_OK){                return changeInputeStream(connection.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 changeInputeStream(InputStream inputStream,String encode) {         //通常叫做内存流,写在内存中的         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();             } catch (IOException e) {                 // TODO Auto-generated catch block                 e.printStackTrace();             }         }         return result;     }     public static void main(String[] arsg){         Map<String, String> params = new HashMap<String, String>();         params.put("username", "lili");         params.put("password", "123");         String result = sendPostMessage(params,"utf-8");         System.out.println("result->"+result);     } } 下边是服务端的Servlet代码:package com.login.manager; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class LoginAction extends HttpServlet {     /**   * Constructor of the object.   */    public LoginAction() {         super();     }     /**   * Destruction of the servlet. <br>   */    public void destroy() {         super.destroy(); // Just puts "destroy" string in log         // Put your code here     }     public void doGet(HttpServletRequest request, HttpServletResponse response)             throws ServletException, IOException {         this.doPost(request, response);           }     /**   * The doPost method of the servlet. <br>   *   * This method is called when a form has its tag value method equals to post.   *    * @param request the request send by the client to the server   * @param response the response send by the server to the client   * @throws ServletException if an error occurred   * @throws IOException if an error occurred   */    public void doPost(HttpServletRequest request, HttpServletResponse response)             throws ServletException, IOException {         response.setContentType("text/html;charset=utf-8");         request.setCharacterEncoding("utf-8");         response.setCharacterEncoding("utf-8");         PrintWriter out = response.getWriter();         String username = request.getParameter("username");  //传过来的内容是:password=123&username=lili        System.out.println("username:"+username);         String pswd = request.getParameter("password");         System.out.println("password:"+pswd);         if(username.equals("张三")&&pswd.equals("123")){             //表示服务器端返回的结果             out.print("login is success!!!!");         }else{             out.print("login is fail!!!");         }               out.flush();         out.close();     }     /**   * Initialization of the servlet. <br>   *   * @throws ServletException if an error occurs   */    public void init() throws ServletException {         // Put your code here     } } 服务端代码使用servlet搭建的。。。这是运行结果:服务端的:在服务端接收的内容是:password=123&username=lili  被它解析啦。更多Android相关信息见Android 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=11本文永久更新链接地址:http://www.linuxidc.com/Linux/2015-08/121969.htm