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. 修改Android签名文件keystore作为eclipse
  2. Android之BroadcastReceiver的使用
  3. android使用aidl实现进程间通信的实例
  4. Android 利用程序实现GPS的打开或关闭
  5. Android(安卓)主题切换
  6. greendao3.2.0使用方法(超详细)
  7. android application access sdcard安卓
  8. 2019-08-20 Android 线性布局介绍-Linear
  9. Android:多个Activity和Intent
  10. 使用Android Studio 3.2编译android-seri