Android网络编程专栏--get和post请求,上传下载文件,提交Cookie

</pre>一.get和post请求方法的封装<p></p><p><span style="white-space:pre"></span>首先是post方法:</p><p></p><pre code_snippet_id="601727" snippet_file_name="blog_20150210_2_1231912" name="code" class="java">/**
     * 进行post请求
     *
     * @param client HttpClient实例
     * @param url     链接地址
     * @param list   需要提交的数据的List
     * @return 请求后返回的信息
     */
    public static String doPost(DefaultHttpClient client, String url,
                                List<NameValuePair> list) {
        try {
            UrlEncodedFormEntity entity = new UrlEncodedFormEntity(list, HTTP.UTF_8); // 设置编码
            HttpPost post = new HttpPost(url.trim()); // 进行post请求
            post.setEntity(entity); // 加入请求头
            Log.d(TESTHTTPCLIENT, "请求头内容:" + post.getAllHeaders().toString() + "::"
                    + post.getHeaders("email").toString() + "::" + post.getEntity().getContent().toString());
            HttpResponse response = client.execute(post); // 执行post请求
            int codeReturn = response.getStatusLine().getStatusCode(); // 获取返回码
            if (codeReturn == HttpStatus.SC_OK) {
                Log.d(TESTHTTPCLIENT, "请求成功");
                HttpEntity httpEntity = response.getEntity();
                return httpEntity == null ? null : EntityUtils.toString(httpEntity);
            } else {
                Log.d(TESTHTTPCLIENT, "请求失败");
                return null;
            }
        } catch (UnsupportedEncodingException e) {
            return null;
        } catch (ClientProtocolException e) {
            e.printStackTrace();
            return null;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }

然后是get方法:

/**
     * 执行GET请求
     *
     * @param client     HttpClient实例
     * @param url        请求的链接
     * @param map        需要提交的参数,放在map中
     * @return 获取xml信息
     */
    public static String doGet(DefaultHttpClient client, String url, Map<String, String> map) {
        StringBuilder sb = null;
        if (map != null) {
            // url重新构造
            sb = new StringBuilder(url);
            sb.append('?');
            // ?page=1&tags="计算机"(全部则为all)
            for (Map.Entry<String, String> entry : map.entrySet()) {
                try {
                    sb.append(entry.getKey()).append('=').append(URLEncoder.encode(entry.getValue(), "UTF-8"))
                            .append('&');
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }
            }
            sb.deleteCharAt(sb.length() - 1);
            Log.d("TestApp", "构造的URL为:" + sb.toString());
        } else {
            sb = new StringBuilder(url);
        }


        // 开始请求操作
        try {
            HttpGet httpGet = new HttpGet(sb.toString());
            HttpResponse response = client.execute(httpGet);
            int codeReturn = response.getStatusLine().getStatusCode(); // 获取返回码
            if (codeReturn == HttpStatus.SC_OK) {
                Log.d(TESTHTTPCLIENT, "请求成功");
                HttpEntity httpEntity = response.getEntity();
                return httpEntity == null ? null : EntityUtils.toString(httpEntity);
            } else {
                Log.d(TESTHTTPCLIENT, "请求失败");
                return null;
            }
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }
二.上传下载文件

        首先是上传文件的代码:

 MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
                    for (int index = 0; index < list.size(); index++) {
                        if (list.get(index).getName().equalsIgnoreCase("img") ||
                                list.get(index).getName().equalsIgnoreCase("headImg") ||
                                list.get(index).getName().equalsIgnoreCase("doc")) {
                            // 将NameValuePair中的地址取出,通过地址获取文件并上传
                            entity.addPart(list.get(index).getName(),
                                    new FileBody(new File(list.get(index).getValue())));
                            Log.d("TestApp", "已经提交文件!");
                        } else {
                            // 普通文字
                            entity.addPart(list.get(index).getName(),
                                    new StringBody(list.get(index).getValue()));
                        }
                    }
解释一下,首先我们需要引用两个包,我的build.gradle中是这么写的
    compile files('libs/apache-mime4j-0.6.jar')
    compile files('libs/httpmime-4.0.1.jar')

下载链接一会儿附上.这个代码片段,其实际意义是从传入的List<NameValuePair>中通过key筛选出文件路径的value,获取路径后直接获取文件,加入到请求头中即可!

然后说一下下载文件的问题,这里仅仅展示如何直接获取下载的文件并获取,多线程下载以及断点下载将在后边进行展示.

public static boolean doGetFileDownload(DefaultHttpClient client, String url) {
        try {
            HttpGet httpGet = new HttpGet(url);
            HttpResponse response = client.execute(httpGet);
            int codeReturn = response.getStatusLine().getStatusCode(); // 获取返回码
            if (codeReturn == HttpStatus.SC_OK) {
                Log.d(TESTHTTPCLIENT, "请求成功");
                String filePath = Environment.getExternalStorageDirectory()
                        .getAbsolutePath() + "/1.doc"; // 文件路径
                Log.d(TESTHTTPCLIENT, "文件保存路径:" + filePath);

                File file = new File(filePath);
                FileOutputStream outputStream = new FileOutputStream(file);
                InputStream inputStream = response.getEntity()
                        .getContent();
                byte b[] = new byte[1024];
                int j = 0;
                while ((j = inputStream.read(b)) != -1) {
                    outputStream.write(b, 0, j);
                }
                outputStream.flush();
                outputStream.close();
                return true;
            } else {
                Log.d(TESTHTTPCLIENT, "请求失败");
                return false;
            }
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
    }
三.提交Cookie

首先需要创建CookieStore这个变量,

private static CookieStore cookieStore = null;

作为一个缓存,然后我们先获取一次缓存,存到变量中,

cookieStore = client.getCookieStore();
最后我们加到请求中并提交:

            // 取出Cookie并添加到请求头
                    if (cookieStore != null) {
                        client.setCookieStore(cookieStore);
                        Log.d("TestApp", "提交Cookie完毕!" + cookieStore.toString());
                    } else {
                        Log.d("TestApp", "提交Cookie时,未获取到cookie");
                    }
到这里,这篇文章正是完成!






  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值