HTTP的请求详解在我的博客中已经讲解过:

http://blog.csdn.net/xiazdong/article/details/7215296

我在http://blog.csdn.net/xiazdong/article/details/7725867 中已经封装了一个HTTP请求的辅助类,因此可以很简单的发送GET、POST请求;

如HttpRequestUtil.sendGetRequest();是发送GET请求;

一、核心代码

 
 

HTTP GET 核心代码:

(1)String value = URLEncoder.encode(String value,"UTF-8");

(2)String path = "http://../path?key="+value;

(3)URL url = new URL(path);//此处的URL需要进行URL编码;

(4)HttpURLConnection con = (HttpURLConnection)url.openConnection();

(5)con.setRequestMethod("GET");

(6)con.setDoOutput(true);

(7)OutputStream out = con.getOutputStream();

(8)out.write(byte[]buf);

(9)int code = con.getResponseCode();

HTTP POST 核心代码:

(1)String value = URLEncoder.encode(String value,"UTF-8");

(2)byte[]buf = ("key="+value).getBytes("UTF-8");

(3)String path = "http://../path";

(4)URL url = new URL(path);//此处的URL需要进行URL编码;

(5)HttpURLConnection con = (HttpURLConnection)url.openConnection();

(6)con.setRequestMethod("POST");

(7)con.setDoOutput(true);

(8)OutputStream out = con.getOutputStream();

(9)out.write(byte[]buf);

(10)int code = con.getResponseCode();

二、GET和POST乱码解决方式

GET:

 

在doGet中加入:

String name = new String(request.getParameter("name").getBytes("ISO-8859-1"),"UTF-8");

POST:

 

在doPost中加入:

 

request.setCharacterEncoding("UTF-8");

详情请看我的博文:

http://blog.csdn.net/xiazdong/article/details/7217022

三、服务器端代码

 
 
  1. package org.xiazdong.servlet;
  2. import java.io.IOException;
  3. import javax.servlet.ServletException;
  4. import javax.servlet.annotation.WebServlet;
  5. import javax.servlet.http.HttpServlet;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. @WebServlet("/PrintServlet")
  9. public class PrintServlet extends HttpServlet {
  10. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  11. String name = new String(request.getParameter("name").getBytes("ISO-8859-1"),"UTF-8");
  12. String age = new String(request.getParameter("age").getBytes("ISO-8859-1"),"UTF-8");
  13. System.out.println("姓名:"+name+"\n年龄:"+age);
  14. }
  15. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  16. request.setCharacterEncoding("UTF-8");
  17. System.out.println("姓名:"+request.getParameter("name")+"\n年龄:"+request.getParameter("age"));
  18. }
  19. }

四、Android端代码

在AndroidManifest.xml加入:

  1. <uses-permission android:name="android.permission.INTERNET"/>

MainActivity.java

  1. package org.xiazdong.network.submit;
  2. import java.io.OutputStream;
  3. import java.net.HttpURLConnection;
  4. import java.net.URL;
  5. import java.net.URLEncoder;
  6. import android.app.Activity;
  7. import android.os.Bundle;
  8. import android.view.View;
  9. import android.view.View.OnClickListener;
  10. import android.widget.Button;
  11. import android.widget.EditText;
  12. import android.widget.Toast;
  13. public class MainActivity extends Activity {
  14. private EditText name, age;
  15. private Button getbutton, postbutton;
  16. private OnClickListener listener = new OnClickListener() {
  17. @Override
  18. public void onClick(View v) {
  19. try{
  20. if (getbutton == v) {
  21. /*
  22. * 因为是GET请求,所以需要将请求参数添加到URL后,并且还需要进行URL编码
  23. * URL = http://192.168.0.103:8080/Server/PrintServlet?name=%E6%88%91&age=20
  24. * 此处需要进行URL编码因为浏览器提交时自动进行URL编码
  25. * */
  26. StringBuilder buf = new StringBuilder("http://192.168.0.103:8080/Server/PrintServlet");
  27. buf.append("?");
  28. buf.append("name="+URLEncoder.encode(name.getText().toString(),"UTF-8")+"&");
  29. buf.append("age="+URLEncoder.encode(age.getText().toString(),"UTF-8"));
  30. URL url = new URL(buf.toString());
  31. HttpURLConnection conn = (HttpURLConnection)url.openConnection();
  32. conn.setRequestMethod("GET");
  33. if(conn.getResponseCode()==200){
  34. Toast.makeText(MainActivity.this, "GET提交成功", Toast.LENGTH_SHORT).show();
  35. }
  36. else Toast.makeText(MainActivity.this, "GET提交失败", Toast.LENGTH_SHORT).show();
  37. }
  38. if (postbutton == v) {
  39. /*
  40. * 如果是POST请求,则请求参数放在请求体中,
  41. * name=%E6%88%91&age=12
  42. *
  43. * */
  44. StringBuilder buf = new StringBuilder();
  45. buf.append("name="+URLEncoder.encode(name.getText().toString(),"UTF-8")+"&");
  46. buf.append("age="+URLEncoder.encode(age.getText().toString(),"UTF-8"));
  47. byte[]data = buf.toString().getBytes("UTF-8");
  48. URL url = new URL("http://192.168.0.103:8080/Server/PrintServlet");
  49. HttpURLConnection conn = (HttpURLConnection)url.openConnection();
  50. conn.setRequestMethod("POST");
  51. conn.setDoOutput(true); //如果要输出,则必须加上此句
  52. OutputStream out = conn.getOutputStream();
  53. out.write(data);
  54. if(conn.getResponseCode()==200){
  55. Toast.makeText(MainActivity.this, "GET提交成功", Toast.LENGTH_SHORT).show();
  56. }
  57. else Toast.makeText(MainActivity.this, "GET提交失败", Toast.LENGTH_SHORT).show();
  58. }
  59. }
  60. catch(Exception e){
  61. }
  62. }
  63. };
  64. @Override
  65. public void onCreate(Bundle savedInstanceState) {
  66. super.onCreate(savedInstanceState);
  67. setContentView(R.layout.main);
  68. name = (EditText) this.findViewById(R.id.name);
  69. age = (EditText) this.findViewById(R.id.age);
  70. getbutton = (Button) this.findViewById(R.id.getbutton);
  71. postbutton = (Button) this.findViewById(R.id.postbutton);
  72. getbutton.setOnClickListener(listener);
  73. postbutton.setOnClickListener(listener);
  74. }
  75. }

Android入门:发送HTTP的GET和POST请求的更多相关文章

  1. Android入门:广播发送者与广播接收者

    参考: Android入门:广播发送者与广播接收者 - xiazdong - CSDN博客http://blog.csdn.net/xiazdong/article/details/7768807 一 ...

  2. Android入门(二十)HttpURLConnection与HttpClient

    原文链接:http://www.orlion.ga/679/ 在 Android上发送 HTTP请求的方式一般有两种,HttpURLConnection和 HttpClient. 一.HttpURLC ...

  3. Android入门(十二)SQLite事务、升级数据库

    原文链接:http://www.orlion.ga/610/ 一.事务 SQLite支持事务,看一下Android如何使用事务:比如 Book表中的数据都已经很老了,现在准备全部废弃掉替换成新数据,可 ...

  4. android之发送短信程序

    首先改写activity_main.xml文件 代码如下: <LinearLayout xmlns:android="http://schemas.android.com/apk/re ...

  5. 【转】Xamarin.Android 入门之:Xamarin+vs2015 环境搭建

    Xamarin.Android 入门之:Xamarin+vs2015 环境搭建   一.前言 此篇博客主要写了如何使用搭建xamarin开发的环境,防止我自己万一哪天电脑重装系统了,可以直接看这篇博客 ...

  6. android 入门 006(sqlite增删改查)

    android 入门 006(sqlite增删改查) package cn.rfvip.feb_14_2_sqlite; import android.content.Context; import ...

  7. android 入门 005(登录记住)

    android 入门 005(登录记住) <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android ...

  8. Android入门:绑定本地服务

    一.绑定服务介绍   前面文章中讲过一般的通过startService开启的服务,当访问者关闭时,服务仍然存在: 但是如果存在这样一种情况:访问者需要与服务进行通信,则我们需要将访问者与服务进行绑定: ...

  9. Android入门视频推荐

      marschen老师的Android入门视频推荐网址: 1.Android应用程序开发视频教程(重制版)第一季 2.Android应用开发视频教程(重制版)第二季 2.marschen老师的个人微 ...

  10. Android入门教程之我见

    真正的从安卓入门学习到实际工作也差不多一年时间了,也做了几个项目.在这期间经历了一开始学习Android的基本知识后仍旧无从下手,不知道如何开始开发一个app,到现在也开始学会注意Android架构的 ...

随机推荐

  1. sql 判断两个时间段是否有交集

    本文转自CSDN 链接地址:http://blog.csdn.net/dasihg/article/details/8450195 时间段:starttime_1到endtime_1,starttim ...

  2. java基础知识回顾之java Socket学习(二)--TCP协议编程

    TCP传输(传输控制协议):TCP协议是一种面向连接的,可靠的字节流服务.当客户端和服务器端彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能进行数据的传输.它将一台主机发出的字节流无差错的 ...

  3. java基础知识回顾之---java String final类普通方法的应用之“按照字节截取字符串”

    /*需求:在java中,字符串“abcd”与字符串“ab你好”的长度是一样,都是四个字符.但对应的字节数不同,一个汉字占两个字节.定义一个方法,按照最大的字节数来取子串.如:对于“ab你好”,如果取三 ...

  4. SDUT图结构练习——最小生成树

    http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=2144&cid=1186 这道题一开始是用prim算法做的,一直错一直错,后来问了帅郭改用 ...

  5. DP方程及意义

    01背包 有N件物品和一个容量为V的背包.第i件物品的费用(即体积,下同)是w[i],价值是c[i].求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大. 基本思路: 这是最基 ...

  6. BZOJ 3129 SDOI2013 方程

    如果没有限制,答案直接用隔板法C(m-1,n-1) 对于>=x的限制,我们直接在对应位置先放上x-1即可,即m=m-(x-1) 对于<=x的限制,由于限制很小我们可以利用容斥原理将它转化为 ...

  7. apache配置优化

    最近参加了很多面试,多多少少有点小感悟,可以说观念转变了不少,特别是对于作为一个开发人员的定位,原来只是认为开发人员就只需要写好代码就行了,所以只需要有数据结构,算法,设计模式,重构方面的知识就行了. ...

  8. C语言中时间调用处理的相关函数介绍

    asctime(将时间和日期以字符串格式表示) 相关函数:time,ctime,gmtime,localtime 表头文件:#include<time.h> 定义函数:char * asc ...

  9. OSSEC 安装执行./install.sh详细信息

    下载好ossec安装文件后解压得到如下目录 [root@localhost ~]# cd ossec-hids-/ [root@localhost ossec-hids-]# ll total drw ...

  10. 神经网络指南Hacker's guide to Neural Networks

    Hi there, I'm a CS PhD student at Stanford. I've worked on Deep Learning for a few years as part of ...