android网络请求

还不清楚android网络请求的小伙伴们注意了。

本文来自http://blog.youkuaiyun.com/zuolongsnail/article/details/6373051加上本人自己的理解。

java.net包中的HttpURLConnection类,它是支持断点下载的

get请求

  public static void requestByGet() throws Exception {
    String path = "https://reg.163.com/logins.jsp?id=helloworld&pwd=android";
    // 新建一个URL对象
    URL url = new URL(path);
    // 打开一个HttpURLConnection连接
    HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
    // 设置连接超时时间
    urlConn.setConnectTimeout(5 * 1000);
    // 开始连接
    urlConn.connect();
    // 判断请求是否成功
    if (urlConn.getResponseCode() == 200) {
      // 获取返回的数据
      Log.e(TAG_GET, "Get方式请求成功,返回数据如下:");
    } else {
      Log.e(TAG_GET, "Get方式请求失败");
    }
    // 关闭连接
    urlConn.disconnect();
  }
post请求

 public static void requestByPost() throws Throwable {
    String path = "https://reg.163.com/logins.jsp";
    // 请求的参数转换为byte数组
    String params = "id=" + URLEncoder.encode("helloworld", "UTF-8") + "&pwd=" + URLEncoder.encode("android", "UTF-8");
    byte[] postData = params.getBytes();
    // 新建一个URL对象
    URL url = new URL(path);
    // 打开一个HttpURLConnection连接
    HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
    // 设置连接超时时间
    urlConn.setConnectTimeout(5 * 1000);
    // Post请求必须设置允许输出
    urlConn.setDoOutput(true);
    // Post请求不能使用缓存
    urlConn.setUseCaches(false);
    // 设置为Post请求
    urlConn.setRequestMethod("POST");
    urlConn.setInstanceFollowRedirects(true);
    // 配置请求Content-Type
    urlConn.setRequestProperty("Content-Type", "application/x-www-form-urlencode");
    // 开始连接
    urlConn.connect();
    // 发送请求参数
    DataOutputStream dos = new DataOutputStream(urlConn.getOutputStream());
    dos.write(postData);
    dos.flush();
    dos.close();
    // 判断请求是否成功
    if (urlConn.getResponseCode() == 200) {
      // 获取返回的数据
      Log.i(TAG_POST, "Post请求方式成功,返回数据如下:");
    } else {
      Log.i(TAG_POST, "Post方式请求失败");
    }
  }

断点下载
public void dd(String mp3Url) throws MalformedURLException, IOException {
    HttpURLConnection cn = (HttpURLConnection) new URL(mp3Url).openConnection();
    cn.setConnectTimeout(5 * 1000);
    // 0.GET :请求方式
    cn.setRequestMethod("GET");
    // 1. Accept:告诉WEB服务器自己接受什么介质类型,*/* 表示任何类型,type/*
    // 表示该类型下的所有子类型,type/sub-type。
    cn.setRequestProperty(
        "Accept",
        "image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/xaml+xml, application/vnd.ms-xpsdocument, application/x-ms-xbap, application/x-ms-application, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*");
    /**
     * Accept-Language:浏览器申明自己接收的语言 语言跟字符集的区别:中文是语言,中文有多种字符集,
     * 比如big5,gb2312,gbk等等。
     */
    cn.setRequestProperty("Accept-Language", "zh-CN");
    // Accept-Charset: 浏览器申明自己接收的字符集
    cn.setRequestProperty("Charset", "UTF-8");
    /**
     * Range:浏览器(比如 Flashget 多线程下载时)告诉 WEB 服务器自己想取对象的 哪部分。 例如:Range:
     * bytes=100-300
     */
    cn.setRequestProperty("Range", "bytes=" + 100 + "-" + 300);// 设置获取实体数据的范围 就是进行断点下载
    /**
     * 浏览器表明自己的身份(是哪种浏览器)。 例如:User-Agent:Mozilla/5.0 (Windows; U; Windows NT
     * 5.1; zh-CN; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14
     */
    cn.setRequestProperty(
        "User-Agent",
        "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)");
    /**
     * Connection:请求:close(告诉WEB服务器或者代理服务器,在完成本次请求的响应 后,断开连接,不要等待本次连接的后续请求了)。
     * keepalive(告诉WEB服务器或者代理服务器,在完成本次请求的 响应后,保持连接,等待本次连接的后续请求)。
     * 响应:close(连接已经关闭)。 keepalive(连接保持着,在等待本次连接的后续请求)
     */
    cn.setRequestProperty("Connection", "Keep-Alive");
    cn.connect();
    // MP3的大小
    InputStream stream = cn.getInputStream();

  }

二:org.apache.http包中的HttpGet和HttpPost类
get请求
private static String JSESSIONID = "";

  // HttpGet方式请求
  public static void requestByHttpGet() throws Exception {
    String path = "https://reg.163.com/logins.jsp?id=helloworld&pwd=android";
    // 新建HttpGet对象
    HttpGet httpGet = new HttpGet(path);
    // 获取HttpClient对象
    DefaultHttpClient httpClient = new DefaultHttpClient();
    // 这里是设置session,不要求的填session的,这步可以去掉
    if (JSESSIONID != "") {
      CookieStore cookieStore = new BasicCookieStore();
      BasicClientCookie cookie = new BasicClientCookie("JSESSIONID", JSESSIONID);
      cookie.setDomain("填域名");
      cookie.setPath("填路径");
      cookieStore.addCookie(cookie);
      httpClient.setCookieStore(cookieStore);
    }
    // 获取HttpResponse实例
    HttpResponse httpResp = httpClient.execute(httpGet);
    // 这里是获取session,<span style="font-family: Arial;">不要求填session,这步</span><span style="font-family: Arial;">可以去掉 </span>
    if (JSESSIONID == "") {
      CookieStore cookiestore = httpClient.getCookieStore();
      List<Cookie> list = cookiestore.getCookies();
      for (Cookie cookie : list) {
        if ("JSESSIONID".equals(cookie.getName())) {
          JSESSIONID = cookie.getValue();
        }
      }
    }
    // 判断是请求成功
    if (httpResp.getStatusLine().getStatusCode() == 200) {
      // 获取返回的数据
      Log.i("TAG_HTTPGET", "HttpGet方式请求成功,返回数据如下:");
    } else {
      Log.i("TAG_HTTPGET", "HttpGet方式请求失败");
    }
  }
post请求
  public static void requestByHttpPost() throws Exception {
    String path = "https://reg.163.com/logins.jsp";
    // 新建HttpPost对象
    HttpPost httpPost = new HttpPost(path);
    // Post参数
    List<NameValuePair> params = new ArrayList<NameValuePair>();
    params.add(new BasicNameValuePair("id", "helloworld"));
    params.add(new BasicNameValuePair("pwd", "android"));
    // 设置字符集
    HttpEntity entity = new UrlEncodedFormEntity(params, HTTP.UTF_8);
    // 设置参数实体
    httpPost.setEntity(entity);
    // 获取HttpClient对象
    DefaultHttpClient httpClient = new DefaultHttpClient();
    // 获取HttpResponse实例
    HttpResponse httpResp = httpClient.execute(httpPost);
    // 判断是够请求成功
    if (httpResp.getStatusLine().getStatusCode() == 200) {
      // 获取返回的数据
      String result = EntityUtils.toString(httpResp.getEntity(), "UTF-8");
      Log.i("TAG_HTTPGET", "HttpPost方式请求成功,返回数据如下:");
      Log.i("TAG_HTTPGET", result);
    } else {
      Log.i("TAG_HTTPGET", "HttpPost方式请求失败");
    }
  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值