基于android的Http网络请求

本文介绍了HTTP协议的基础知识,包括其作为应用层协议的工作原理、如何基于TCP实现可靠的数据传输,以及GET、POST等常见请求方法的具体使用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


Http协议:

http是一种应用层协议,它是基于TCP实现了可靠的数据传输,能够保证数据的完整性,可靠性。(TCP提供了可靠的字节流服务,采用3次握手策略)TCP将http的请求报文按序号分割成报文段,服务端将将接收到的报文 段按原来的顺序重组,这样一来对于数据量大的请求报文也能有效的进行传输。

为什么说http是一种应用层协议呢?看下面TCP/IP的分层图就可以理解了。

应用层---->      Http

传输层---->      TCP

网络层---->      IP

数据链路层--->网络/网络接口

Http协议的请求方法介绍:

GET :获取URL所定位的资源。

POST : 用于服务端传递数据。

HEAD:用于请求服务端头部信息,服务端不会返回实体的主体部分。

PUT: 向服务器写入资源(这个一般都不会使用或者说被禁止使用)

DELETE :通知服务端删除URL所指定的资源

TRACE :客户端发送一个请求,一般都会通过防火墙,端口,从而会改变原来的Http请求,所以它用来回显服务端收到的请求。

OPTIONS :返回服务器针对特定资源所支持的HTTP请求方法。(出于安全性考虑这个方法也基本上被禁止了)。

通过Http的GET请求获取URL所指定的资源:

public class MainActivity extends Activity {
	private Button bt;
	private TextView text;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        bt = (Button) findViewById(R.id.bt);
        text = (TextView) findViewById(R.id.text);
        final StringBuffer buffer = new StringBuffer();
        bt.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				new AsyncTask<String, Void, String>() {

					@Override
					protected String doInBackground(String... arg0) {
						try {
							URL url = new URL(arg0[0]);
							HttpURLConnection con = (HttpURLConnection) url.openConnection();
							//添加请求方法
							con.setRequestMethod("GET");
							//添加请求头
							con.setRequestProperty("Connection", "Keep-Alive");
							//获取服务端返回的输入流,拿到实体数据
							InputStream is = con.getInputStream();
							InputStreamReader isr = new InputStreamReader(is);
							BufferedReader reader = new BufferedReader(isr);
							String line;
							while((line = reader.readLine()) != null){
								buffer.append(line);
								Log.d("AAAA", line);
							}
							is.close();
							isr.close();
							reader.close();
						} catch (MalformedURLException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						} catch (IOException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}finally{
						}
						return buffer.toString();
					}
					
					protected void onPostExecute(String result) {
						text.setText(result);
					};
				}.execute("http://www.cnblogs.com/jdsjlzx/archive/2011/07/25/2116351.html");
			}
		});
    }
}
通过GET请求获取的结果:



Http的POST请求:

public class MainActivity extends Activity {
	private Button bt;
	private TextView text;
	private String result;
	@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        bt = (Button) findViewById(R.id.bt);
        text = (TextView) findViewById(R.id.text);
        bt.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				new AsyncTask<String, Void, String>() {

					@Override
					protected String doInBackground(String... arg0) {
						try {
							URL url = new URL(arg0[0]);
							HttpURLConnection con = (HttpURLConnection) url.openConnection();
							
							//添加请求方法
							con.setRequestMethod("POST");
							//启动输出流,当需要传输数据的时候开启
							con.setDoOutput(true);
							
							
							//获取输出流用于传输数据
							OutputStream os = con.getOutputStream();
							//http://baike.baidu.com/link
							//?url=CnOOIvUbKn-KxsPSAglWkeks4P9IN3FRT7ggUNLDNLjKgsLfJIGEf0GuA9p_3Dc7c-n4ffk3etWgRgYyYUwbF_
							OutputStreamWriter writer = new OutputStreamWriter(os,"utf-8");
							BufferedWriter bw = new BufferedWriter(writer);
							bw.write("url=CnOOIvUbKn-KxsPSAglWkeks4P9IN3FRT7ggUNLDNLjKgsLfJIGEf0GuA9p_3Dc7c-n4ffk3etWgRgYyYUwbF_");
							bw.flush();
							
							//获取服务端返回的输入流,获取到返回的实体
							InputStream is = con.getInputStream();
							InputStreamReader isr = new InputStreamReader(is);
							BufferedReader br = new BufferedReader(isr);
							String line;
							while((line = br.readLine()) != null){
								Log.d("AAAA", line);
								result += line;
							}
							bw.close();
							writer.close();
							is.close();
							isr.close();
							br.close();
							
							
						} catch (MalformedURLException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						} catch (IOException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
						return result;
					}
					
					protected void onPostExecute(String result) {
						text.setText(result);
					};

				}.execute("http://baike.baidu.com/link");
			}
		});
    }
}

POST请求结果:



以上就是Http协议的基本介绍,如果还想更深入了解的话可以自己去了解相关的Http协议的相关知识。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值