Http通信

一.使用HttpURLConnection进行网络通信。HttpURLConnection类位于java.net包中,用于发送HTTP请求和获取HTTP响应,由于该类是抽象类,不能直接实例化对象,需要使用URL的openConnection()方法来获得。

1.使用HttpURLConnection发送GET请求。使用HttpURLConnection对象发送请求时,默认发送的就是GET请求。因此,发送GET请求比较简单,只是在指定连接地址时,先将要传递的参数通过“?参数名=参数值&参数名=参数值”等进行传递,然后获取流中的数据并关闭连接即可。

//使用HttpURLConnection发送GET请求(默认情况下HttpURLConnection使用GET请求)
	public void HttpURLConnection_GET(){
		//创建URL对象
		try {
			URL url = new URL("https://www.baidu.com/s?wd=你好");
			//创建一个HTTP连接
			try {
				HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
				Toast.makeText(myHttpURLConnection.this, "HTPP连接成功!", Toast.LENGTH_SHORT).show();
				//设置请求超时
				urlConnection.setReadTimeout(2000);//2秒
				//获取数据	
<span>				</span>//断开连接
<span>				</span>urlConnection.disconnect();			
			} catch (IOException e) {
				System.out.println("HTPP连接出错!");
				Toast.makeText(myHttpURLConnection.this, "HTPP连接出错!", Toast.LENGTH_SHORT).show();
			}
		} catch (MalformedURLException e) {
			System.out.println("URL不存在!");
			Toast.makeText(myHttpURLConnection.this, "URL不存在!", Toast.LENGTH_SHORT).show();
		}
	}
2.由于采用GET秦秋发送请求只适合发送大小在1024个字节以内的数据,所以当要发送的数据比较大的时候,就需要使用POST方式来发送该请求。在Android中,使用HttpURLConnection类在发送请求时,默认采用的是GET请求,如果发送POST请求,需要通过setRequestMethod()方法进行制定。

其它方法:

setDoInput(boolean newvalue):用于设置是否向连接中写入数据,如果参数值为true,表示写入数据,否则不写入数据。

setDoOutput(boolean newvalue):用于设置是否从连接中读取数据,如果参数值为true时,表示读取数据,否则不读取数据。

setUseCaches(boolean newvalue):用于这是是否缓存数据,true表示缓存数据,否则表示禁用缓存。

setInstanceFollwRedirects(boolean followRedirects):用于设置是否应该自动执行http重定向,true表示自动执行,否则不自动执行。

setRequestProperty(String field,String newValue):用于设置一般请求属性,列列如,要设置内容类型为表单数据,可以进行一下设置setRequestProperty("Content-Type","application/x-www/form-urlencodesd")。

//使用HttpURLConnection发送POST请求
	public void HttpURLConnection_POST(){
		//要提交的地址
		String target = "http://www.baidu.com/";
		URL url;
		try {
			url = new URL(target);			
			HttpURLConnection conn = (HttpURLConnection) url.openConnection();	//创建http连接
			conn.setRequestMethod("POST");                                      //指定使用POST请求方式
			conn.setDoInput(true);                                              //向连接中写入数据
			conn.setDoOutput(true);                                             //从连接中读取数据
			conn.setUseCaches(false);                                           //禁用缓存
			conn.setInstanceFollowRedirects(true);                              //自动执行htpp重定向
			conn.setRequestProperty("Content-Type",	"application/x-www-form-urlencoded");	//设置内容类型
			//获取数据,此处省略
			//判断是否响应成功
			if(conn.getResponseCode() == HttpURLConnection.HTTP_OK){
				
			}	
			conn.disconnect();    //断开连接
		} catch (MalformedURLException e) {
			System.out.println("URL不存在!");
			Toast.makeText(myHttpURLConnection.this, "URL不存在!", Toast.LENGTH_SHORT).show();
		} catch (IOException e) {
			System.out.println("HTPP连接出错!");
			Toast.makeText(myHttpURLConnection.this, "HTPP连接出错!", Toast.LENGTH_SHORT).show();
		}
	}
二.HttpURLConnection技术一般使用在到某个页面提交请求并获取服务器响应。不过,对于比较复杂的联网操作使用HttpURLConnection类就不一定能满足要求,这时,可以使用Apache组织提供的一个HttpClient项目实现。

1.发送GET请求。

//使用HttpClient的HttpGet类发送GET请求
	public void HttpClient_GET(){
		String target = "http://www.baidu.com/";
		//创建HttpClient对象
		HttpClient httpClient = new DefaultHttpClient();
		//创建httpgGet连接对象
		HttpGet httpRequest = new HttpGet(target);
		HttpResponse httpResponse;
		try {
			//执行HttpClient请求
			httpResponse = httpClient.execute(httpRequest);
			/*
			if(httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
				//获取返回的字符串
				String result = EntityUtils.toString(httpResponse.getEntity());	
			}else{
				System.out.println("请求失败!");
				Toast.makeText(myHttpURLConnection.this, "请求失败!", Toast.LENGTH_SHORT).show();
			}*/
		} catch (ClientProtocolException e) {
			System.out.println("HttpClient请求失败!");
			Toast.makeText(myHttpURLConnection.this, "HttpClient请求失败!", Toast.LENGTH_SHORT).show();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
2.发送POST请求

步骤:    (1)创建HttpClient对象;

(2)创建HttpPOST对象;

(3)如果需要发送请求参数,可以调用HttpPOST的setParams或setEntity方法来添加请求参数;

(4)调用HttpClient对象的execute方法发送请求,执行该方法将返回一个HttpResponse对象;

(5)调用HttpResponse的getEntity方法,对获得包含了服务器响应内容的HttpEntity对象,通过该对象可以获取服务器的响应内容。

//使用HttpClient发送POST请求
	public void HttpClient_POST(){
		String target = "http://www.baidu.com/";
		//创建HtppClient对象
		HttpClient httpClient = new DefaultHttpClient();
		//创建HttpPOST对象
		HttpPost httpPost = new HttpPost(target);
		//将要传递的参数保存到List集合中
		List<NameValuePair> params = new ArrayList<NameValuePair>();
		params.add(new BasicNameValuePair("param", "post"));	//标记参数
		params.add(new BasicNameValuePair("nick_name", "昵称"));
//		HttpRequest.setEntity(new UrlEncodedFormEntity(params,"utf-8"));	//设置编码方式
		try {
			//执行HttpClient请求
			HttpResponse httpResponse = httpClient.execute(httpPost);
			if(httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
				String result = EntityUtils.toString(httpResponse.getEntity());	//获取返回的字符串
			}else{
				Toast.makeText(myHttpURLConnection.this, "HttpClient请求失败!", Toast.LENGTH_SHORT).show();
			}
		} catch (ClientProtocolException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值