from: http://blog.dahanne.net/2009/08/16/how-to-access-http-resources-from-android/

First Method : getting an input stream given a simple url from Android using HttpURLConnection

This method is the most basic one : it allows you, using the basic HttpUrlConnection, ( contained in java.net) to get an InputStream from an Url :

private InputStream downloadUrl(String url) {HttpURLConnection con = null;URL url;InputStream is=null;try {url = new URL(url);con = (HttpURLConnection) url.openConnection();con.setReadTimeout(10000 /* milliseconds */);con.setConnectTimeout(15000 /* milliseconds */);con.setRequestMethod("GET");con.setDoInput(true);con.addRequestProperty("Referer", "http://blog.dahanne.net");// Start the querycon.connect();is = con.getInputStream();}catch (IOException e) {                        //handle the exception !e.printStackTrace();}return is; }

You can also use the Post method, sending data in the HTTP POST payload :

private InputStream downloadUrl(String url) {                InputStream myInputStream =null;StringBuilder sb = new StringBuilder();                //adding some data to send along with the request to the serversb.append("name=Anthony");URL url;try {url = new URL(url);HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.setDoOutput(true);conn.setRequestMethod("POST");OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());                        // this is were we're adding post data to the request                        wr.write(sb.toString());wr.flush();myInputStream = conn.getInputStream();wr.close();} catch (Exception e) {                        //handle the exception !Log.d(TAG,e.getMessage());}                return myInputStream;}

But there are better ways to achieve that, using Apache HttpClient, included in android.jar (no need to add another jar, it’s included in android core)

Second Method : getting an input stream given a simple url from Android using HttpClient

Why is it a better to do it ? because the simpler, the better ! See by yourself :

public static InputStream getInputStreamFromUrl(String url) {InputStream content = null;try {HttpGet httpGet = new HttpGet(url);HttpClient httpclient = new DefaultHttpClient();// Execute HTTP Get RequestHttpResponse response = httpclient.execute(httpGet);content = response.getEntity().getContent();                } catch (Exception e) {//handle the exception !}return content;}

But you maybe wondering if it’s still easy with HTTP Post method ? You won’t be deceived !

public static InputStream getInputStreamFromUrl(String url) {InputStream content = null;try {          HttpClient httpclient = new DefaultHttpClient();HttpPost httpPost = new HttpPost(url);List nameValuePairs = new ArrayList(1);                        //this is where you add your data to the post method                        nameValuePairs.add(new BasicNameValuePair("name", "anthony"));httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));// Execute HTTP Post RequestHttpResponse response = httpclient.execute(httpPost);content = response.getEntity().getContent();        return content;        }}

But what if you want to read a cookie from the response ? And how can you send a cookie back to the server for the next request ?

Reading / Sending a cookie along with the requests

Using Apache HttpClient, it’s easy to retrieve cookies ! Everything is in the headers after all !

[...]Cookie sessionCookie =null;HttpResponse response = httpclient.execute(httpPost);Header[] allHeaders = response.getAllHeaders();CookieOrigin origin = new CookieOrigin(host, port,path, false);for (Header header : allHeaders) {List parse = cookieSpecBase.parse(header, origin);for (Cookie cookie : parse) {// THE cookieif (cookie.getName().equals(COOKIE_I_WAS_LOOKING_FOR)&& cookie.getValue() != null && cookie.getValue() != "") {sessionCookie = cookie;}}}

To send a cookie along with your request, keep it simple :

HttpPost httpPost = new HttpPost(url);CookieSpecBase cookieSpecBase = new BrowserCompatSpec();List cookies = new ArrayList();cookies.add(sessionCookie);List cookieHeader = cookieSpecBase.formatCookies(cookies);// Setting the cookiehttpPost.setHeader(cookieHeader.get(0));

What about the resulting InputStream ? You definitely want to transform it into a String or an Drawable (to set it to an ImageView for example !) don’t you ?

Converting the InputStream into a Drawable in Android

The Drawable class already handles that for you :

Drawable d = Drawable.createFromStream(myInputStream, "nameOfMyResource");

Converting the InputStream into a String in Android

This is some classic java stuff (don’t tell about how easier it is in Ruby.. I know… but hey ! Java SE7 at the rescue with NIO !!! maybe one day in 2010 ! )

BufferedReader rd = new BufferedReader(new InputStreamReader(myInputStreamToReadIntoAString), 4096);String line;StringBuilder sb =  new StringBuilder();while ((line = rd.readLine()) != null) {sb.append(line);}rd.close();String contentOfMyInputStream = sb.toString() That's it folks ! If you have any other methods to achieve these goals, feel free to share them sending a comment !

更多相关文章

  1. 代码中设置drawableleft
  2. android 3.0 隐藏 系统标题栏
  3. Android开发中activity切换动画的实现
  4. Android(安卓)学习 笔记_05. 文件下载
  5. Android中直播视频技术探究之—摄像头Camera视频源数据采集解析
  6. 技术博客汇总
  7. android 2.3 wifi (一)
  8. AndRoid Notification的清空和修改
  9. Android中的Chronometer

随机推荐

  1. MySql使用skip-name-resolve解决外网链接
  2. MySQ登录提示ERROR 1045 (28000)错误的解
  3. linux下多个mysql5.7.19(tar.gz)安装图文
  4. linux下mysql5.7.19(tar.gz)安装图文教程
  5. mysql5.7.17.msi安装图文教程
  6. Mysql5.7中JSON操作函数使用说明
  7. mysql server is running with the --ski
  8. Mysql 5.7.19 winx64 ZIP Archive 安装及
  9. MySQL 4G内存服务器配置优化
  10. MySQL中KEY、PRIMARY KEY、UNIQUE KEY、I