Android入门:发送HTTP的GET和POST请求


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

http://blog.youkuaiyun.com/xiazdong/article/details/7215296


一、核心代码


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.youkuaiyun.com/xiazdong/article/details/7217022


三、服务器端代码


package org.xiazdong.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/PrintServlet") public class PrintServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String name = new String(request.getParameter("name").getBytes("ISO-8859-1"),"UTF-8"); String age = new String(request.getParameter("age").getBytes("ISO-8859-1"),"UTF-8"); System.out.println("姓名:"+name+"\n年龄:"+age); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); System.out.println("姓名:"+request.getParameter("name")+"\n年龄:"+request.getParameter("age")); } }



四、Android端代码


在AndroidManifest.xml加入:

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

package org.xiazdong.network.submit; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends Activity { private EditText name, age; private Button getbutton, postbutton; private OnClickListener listener = new OnClickListener() { @Override public void onClick(View v) { try{ if (getbutton == v) { /* * 因为是GET请求,所以需要将请求参数添加到URL后,并且还需要进行URL编码 * URL = http://192.168.0.103:8080/Server/PrintServlet?name=%E6%88%91&age=20 * 此处需要进行URL编码因为浏览器提交时自动进行URL编码 * */ StringBuilder buf = new StringBuilder("http://192.168.0.103:8080/Server/PrintServlet"); buf.append("?"); buf.append("name="+URLEncoder.encode(name.getText().toString(),"UTF-8")+"&"); buf.append("age="+URLEncoder.encode(age.getText().toString(),"UTF-8")); URL url = new URL(buf.toString()); HttpURLConnection conn = (HttpURLConnection)url.openConnection(); conn.setRequestMethod("GET"); if(conn.getResponseCode()==200){ Toast.makeText(MainActivity.this, "GET提交成功", Toast.LENGTH_SHORT).show(); } else Toast.makeText(MainActivity.this, "GET提交失败", Toast.LENGTH_SHORT).show(); } if (postbutton == v) { /* * 如果是POST请求,则请求参数放在请求体中, * name=%E6%88%91&age=12 * * */ StringBuilder buf = new StringBuilder(); buf.append("name="+URLEncoder.encode(name.getText().toString(),"UTF-8")+"&"); buf.append("age="+URLEncoder.encode(age.getText().toString(),"UTF-8")); byte[]data = buf.toString().getBytes("UTF-8"); URL url = new URL("http://192.168.0.103:8080/Server/PrintServlet"); HttpURLConnection conn = (HttpURLConnection)url.openConnection(); conn.setRequestMethod("POST"); conn.setDoOutput(true); //如果要输出,则必须加上此句 OutputStream out = conn.getOutputStream(); out.write(data); if(conn.getResponseCode()==200){ Toast.makeText(MainActivity.this, "GET提交成功", Toast.LENGTH_SHORT).show(); } else Toast.makeText(MainActivity.this, "GET提交失败", Toast.LENGTH_SHORT).show(); } } catch(Exception e){ } } }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); name = (EditText) this.findViewById(R.id.name); age = (EditText) this.findViewById(R.id.age); getbutton = (Button) this.findViewById(R.id.getbutton); postbutton = (Button) this.findViewById(R.id.postbutton); getbutton.setOnClickListener(listener); postbutton.setOnClickListener(listener); } }




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值