`
hellobin
  • 浏览: 65541 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Android HttpURLConnection 与 HttpDefaultClient

 
阅读更多

HttpURLConnection 在java里面会发生能用,然而在Android里却不能用的情况!

 

private class MyAuthenticator extends Authenticator {

		private String user = null;
		private String passwd = null;

		public MyAuthenticator(String user, String passwd) {
			this.user = user;
			this.passwd = passwd;
		}

		@Override
		public PasswordAuthentication getPasswordAuthentication() {
			System.out.println("getPasswordAuthentication");
			return (new PasswordAuthentication(user, passwd.toCharArray()));
		}
	}

	public String doRequest(String user, String passwd, String link) throws Exception {

		Authenticator.setDefault(new MyAuthenticator(user, passwd));

		URL url = new URL(link);

		HttpURLConnection conn = (HttpURLConnection) url.openConnection();
		
		conn.setConnectTimeout(15000);
		conn.setReadTimeout(15000);

		InputStream in = new BufferedInputStream(conn.getInputStream());
		try {
			ByteArrayOutputStream bout = new ByteArrayOutputStream(10000);
			int b;
			while ((b = in.read()) != -1) {
				bout.write(b);
			}
			return bout.toString();
		} finally {
			in.close();
		}

	}

	public int doPost(String user, String passwd, String link, String data)
			throws Exception {

		Authenticator.setDefault(new MyAuthenticator(user, passwd));

		URL url = new URL(link);
		HttpURLConnection conn = (HttpURLConnection) url.openConnection();
		conn.setDoOutput(true);
		conn.setRequestMethod("PUT");
		conn.setRequestProperty("Content-Type",
				"application/x-www-form-urlencoded");
		conn.setRequestProperty("Connection", "close");
		conn.setRequestProperty("Accept-Encoding", "identity");
		conn.setRequestProperty("Accept-Charset", "UTF-8");
		// conn.setRequestProperty("Host", "11.22.33.44");
		conn.setUseCaches(false);
		conn.setDoOutput(true);
		conn.setRequestProperty("Content-Length",
				Integer.toString(data.length()));
		OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
		// this is were we're adding post data to the request
		// wr.write(sb.toString());
		wr.write(data);
		wr.flush();
		wr.close();

		int responseCode = conn.getResponseCode();
		return responseCode;
	}

 

 

为了避免这样情况出现,可用HttpDefaultClient

 

public void doGet(){
	
		DefaultHttpClient client = null;

		try
		{
			// Set url
			URI uri = new URI("http://yourdomain.com/yourpage?yourparamname=yourparamvalue");


			client = new DefaultHttpClient();

			client.getCredentialsProvider().setCredentials(
					new AuthScope(uri.getHost(), uri.getPort(),AuthScope.ANY_SCHEME),
					new UsernamePasswordCredentials("user", "passwd"));

			// Set timeout
			client.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 5000);
			HttpGet request = new HttpGet(uri);

			HttpResponse response = client.execute(request);
			if(response.getStatusLine().getStatusCode() == 200)
			{
				InputStream responseIS = response.getEntity().getContent();
				BufferedReader reader = new BufferedReader(new InputStreamReader(responseIS));
				String line = reader.readLine();
				while (line != null)
				{
					System.out.println(line);
					line = reader.readLine();
				}
			}
			else
			{
				System.out.println("Resource not available");
			}
		}
		catch (URISyntaxException e)
		{
			System.out.println(e.getMessage());
		}
		catch (ClientProtocolException e)
		{
			System.out.println(e.getMessage());
		}
		catch (ConnectTimeoutException e)
		{
			System.out.println(e.getMessage());
		}
		catch (IOException e)
		{
			System.out.println(e.getMessage());
		}
		catch (Exception e)
		{
			System.out.println(e.getMessage());
		}
		finally
		{
			if ( client != null )
			{
				client.getConnectionManager().shutdown();
			}
		}
	}
	
	public void doPut(){
		DefaultHttpClient client = null;

		try
		{
			// Set url
			URI uri = new URI("http://yourdomain.com/yourpage?yourparamname=yourparamvalue");


			client = new DefaultHttpClient();

			client.getCredentialsProvider().setCredentials(
					new AuthScope(uri.getHost(), uri.getPort(),AuthScope.ANY_SCHEME),
					new UsernamePasswordCredentials("user", "passwd"));

			// Set timeout
			client.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 5000);
			HttpPut httpPut = new HttpPut(uri);
            StringEntity se = new StringEntity("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
            se.setContentEncoding("UTF-8");
            httpPut.setHeader("Content-Type", "application/x-www-form-urlencoded");
            httpPut.setHeader("Connection", "close");
            httpPut.setHeader("Accept-Encoding", "identity");
            httpPut.setEntity(se);
            HttpResponse response = client.execute(httpPut);
            
            System.out.println(response.getStatusLine().getStatusCode());
            if(response.getStatusLine().getStatusCode() == 200)
			{
				InputStream responseIS = response.getEntity().getContent();
				BufferedReader reader = new BufferedReader(new InputStreamReader(responseIS));
				String line = reader.readLine();
				while (line != null)
				{
					System.out.println(line);
					line = reader.readLine();
				}
			}
			else
			{
				System.out.println("Resource not available");
			}
		}
		catch (URISyntaxException e)
		{
			System.out.println(e.getMessage());
		}
		catch (ClientProtocolException e)
		{
			System.out.println(e.getMessage());
		}
		catch (ConnectTimeoutException e)
		{
			System.out.println(e.getMessage());
		}
		catch (IOException e)
		{
			System.out.println(e.getMessage());
		}
		catch (Exception e)
		{
			System.out.println(e.getMessage());
		}
		finally
		{
			if ( client != null )
			{
				client.getConnectionManager().shutdown();
			}
		}
	}

 

部分参考 http://www.mustdev.com/?p=71&lang=en

分享到:
评论

相关推荐

    Android httpUrlConnection Post方式访问网络简单demo

    在Android开发中,HTTP请求是应用与服务器交互的重要方式之一,`HttpURLConnection`是Java标准库提供的一种HTTP客户端API,适合用于发送POST请求。在这个"Android httpUrlConnection Post方式访问网络简单demo"中,...

    Android HttpUrlConnection json使用方法

    在Android开发中,HttpUrlConnection是用于网络通信的一种基础组件,尤其在处理JSON数据时,它扮演了重要的角色。本文将详细介绍如何使用HttpUrlConnection进行HTTP的POST和GET请求,并处理JSON响应。 首先,理解...

    Android HttpURLConnection.getResponseCode()错误解决方法

    正文:我在使用HttpURLConnection.getResponseCode()的时候直接报错是IOException错误,responseCode = -1。一直想不明白,同一个程序我调用了两次,结果有一个链接一直OK,另一个却一直报这个错误。后来发现两个...

    AndroidHttpURLConnection发送GET请求

    调用URL对象的openConnection( )来获取HttpURLConnection对象实例: HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 设置HTTP请求使用的方法:conn.setRequestMethod("GET"); 设置连接超时,...

    Android-使用HttpURLConnection实现断点续传

    HttpURLConnection是Java标准库提供的一种网络连接接口,适用于Android系统,它提供了更高效、更灵活的网络通信方式。本文将详细介绍如何利用HttpURLConnection实现Android应用中的断点续传功能。 首先,理解断点续...

    android HttpURLConnection上传图片demo

    HttpURLConnection是Java标准库中的一个类,它允许Android应用程序与HTTP服务器进行通信,执行GET、POST等请求。下面我们将详细讨论如何利用HttpURLConnection上传图片。 首先,我们需要获取到用户选择或拍摄的图片...

    Android 简单使用 HttpURLConnection

    本篇文章将深入探讨如何在Android中简单使用`HttpURLConnection`进行网络请求。 首先,了解`HttpURLConnection`的基本用法。在Android中,网络操作通常在子线程(非UI线程)中进行,以避免阻塞主线程导致应用无响应...

    Android移动开发-使用HttpURLConnection实现多线程的下载

    实例Demo程序来示范使用HttpURLConnection实现多线程下载。 使用多线程下载文件可以更快完成文件的下载,因为客户端启动多条线程进行下载就意味着服务器也需要为该客户端提供响应的服务。假设服务器同时最多服务100...

    android+httpurlconnection

    在Android开发中,HTTPURLConnection是Java标准库提供的一种网络通信方式,用于与HTTP服务器进行交互。本项目聚焦于如何利用HTTPURLConnection实现从网络上下载图片并显示在Android Activity中。这个过程涉及到网络...

    Android HttpURLConnection 读取网络图片.rar

     HttpURLConnection conn = (HttpURLConnection) imageUrl.openConnection();// 取得连接  conn.connect();  InputStream is = conn.getInputStream();//取得返回的InputStream  bitmap = BitmapFactory....

    Android基于HttpUrlConnection类的文件下载实例代码

    Android基于HttpUrlConnection类的文件下载实例代码 Android操作系统中,文件下载是一种常见的功能,为了实现文件下载,Android提供了多种方式,包括使用HttpUrlConnection类和OkHttp库等。HttpUrlConnection类是...

    java android httpURLConnection的封装

    综上所述,对java android httpURLConnection的封装,涉及到接口设计、HTTP协议的理解、字符编码的处理、请求与响应的封装、网络异常的处理等多个知识点。封装的目的在于提高代码复用率、提高开发效率和提升用户体验...

    AsyncTask结合HttpUrlConnection的例子

    在Android开发中,异步处理是非常重要的一环,特别是在与服务器进行数据交互时,为了保持UI线程的流畅性,避免出现"应用无响应"(ANR)的情况,开发者通常会使用`AsyncTask`。本例子是关于如何将`AsyncTask`与`...

    本示例使用HttpUrlConnection实现上传文件

    在Android开发中,有时我们需要将本地的文件...通过理解以上步骤和注意事项,开发者可以有效地利用HttpURLConnection在Android应用中实现代理文件上传功能。同时,了解服务器端如何接收和处理这些文件也是至关重要的。

    HttpURLConnection和简单的Android服务器交互

    在Android应用开发中,与服务器进行数据交互是常见的需求,HttpURLConnection是Android SDK提供的一种轻量级、低级别的网络通信接口。本主题将深入探讨如何使用HttpURLConnection进行Android与服务器的简单交互,...

    android HttpURLConnection,AsyncHttpClient网络请求实例

    综上所述,Android应用开发中的网络请求是一个关键领域,掌握HttpURLConnection和AsyncHttpClient的使用对于编写高效、稳定的网络功能至关重要。在实践中,应根据项目需求和团队偏好灵活选择合适的网络请求库,并...

    Android HttpURLConnection中 StrictMode同时支持3.0以上和3.0以下版本

    然而,从Android 3.0 (API Level 11)开始,引入了`StrictMode`来帮助开发者检测和防止在主线程中进行耗时的操作,这与早期版本的处理方式有所不同。`StrictMode`旨在提升应用性能和用户体验,但在不同版本之间适配...

    android 联网请求的两种方式HttpURLConnection和HttpClient

    在Android开发中,联网请求是应用与服务器交互的基础,用于获取或发送数据。常见的联网请求方式有两种:HttpURLConnection和HttpClient。下面将详细讲解这两种方法,以及它们如何处理POST和GET请求。 **...

    Android25图灵聊天项目------HttpURLConnection请求get文本数据

    通过分析这个文件,你可以深入理解Android应用如何与服务器进行交互,获取并处理文本数据。同时,这也是一个很好的学习和实践机会,有助于提升你的Android网络编程技能。在实际开发中,你还需要考虑错误处理、安全性...

Global site tag (gtag.js) - Google Analytics