当前位置: 首页 > news >正文

Android之用HTTP的get,post,HttpClient三种方式向service提交文本数据

客户端代码示例:

/** * HTTP请求 * @author kesenhoo * */ public class HttpRequest { public static boolean sendXML(String path, String xml)throws Exception { byte[] data = xml.getBytes(); URL url = new URL(path); HttpURLConnection conn = (HttpURLConnection)url.openConnection(); conn.setRequestMethod("POST"); conn.setConnectTimeout(5 * 1000); //如果通过post提交数据,必须设置允许对外输出数据 conn.setDoOutput(true); conn.setRequestProperty("Content-Type", "text/xml; charset=UTF-8"); conn.setRequestProperty("Content-Length", String.valueOf(data.length)); OutputStream outStream = conn.getOutputStream(); outStream.write(data); outStream.flush(); outStream.close(); if(conn.getResponseCode()==200) { return true; } return false; } /** * 通过get方式提交参数给服务器 * @param path * @param params * @param enc * @return * @throws Exception */ public static boolean sendGetRequest(String path, Map<String, String> params, String enc) throws Exception { //构造如下形式的字符串,这里的字符串依情况不同 // ?method=save&title=435435435&timelength=89& //使用StringBuilder对象 StringBuilder sb = new StringBuilder(path); sb.append('?'); //迭代Map for(Map.Entry<String, String> entry : params.entrySet()) { sb.append(entry.getKey()).append('=') .append(URLEncoder.encode(entry.getValue(), enc)).append('&'); } sb.deleteCharAt(sb.length()-1); //打开链接 URL url = new URL(sb.toString()); HttpURLConnection conn = (HttpURLConnection)url.openConnection(); conn.setRequestMethod("GET"); conn.setConnectTimeout(5 * 1000); //如果请求响应码是200,则表示成功 if(conn.getResponseCode()==200) { return true; } return false; } /** * 通过Post方式提交参数给服务器 * @param path * @param params * @param enc * @return * @throws Exception */ public static boolean sendPostRequest(String path, Map<String, String> params, String enc) throws Exception { //需要构造的字符串形式如下: // title=dsfdsf&timelength=23&method=save StringBuilder sb = new StringBuilder(); //如果参数不为空 if(params!=null && !params.isEmpty()) { for(Map.Entry<String, String> entry : params.entrySet()) { //Post方式提交参数的话,不能省略内容类型与长度 sb.append(entry.getKey()).append('=') .append(URLEncoder.encode(entry.getValue(), enc)).append('&'); } sb.deleteCharAt(sb.length()-1); } //得到实体的二进制数据 byte[] entitydata = sb.toString().getBytes(); URL url = new URL(path); HttpURLConnection conn = (HttpURLConnection)url.openConnection(); conn.setRequestMethod("POST"); conn.setConnectTimeout(5 * 1000); //如果通过post提交数据,必须设置允许对外输出数据 conn.setDoOutput(true); //这里只设置内容类型与内容长度的头字段 //内容类型Content-Type: application/x-www-form-urlencoded //内容长度Content-Length: 38 conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); conn.setRequestProperty("Content-Length", String.valueOf(entitydata.length)); OutputStream outStream = conn.getOutputStream(); //把实体数据写入是输出流 outStream.write(entitydata); //内存中的数据刷入 outStream.flush(); outStream.close(); //如果请求响应码是200,则表示成功 if(conn.getResponseCode()==200) { return true; } return false; } /** * 在遇上HTTPS安全模式或者操作cookie的时候使用HTTPclient会方便很多 * 使用HTTPClient(开源项目)向服务器提交参数 * @param path * @param params * @param enc * @return * @throws Exception */ public static boolean sendRequestFromHttpClient(String path, Map<String, String> params, String enc) throws Exception { //需要把参数放到NameValuePair List<NameValuePair> paramPairs = new ArrayList<NameValuePair>(); if(params!=null && !params.isEmpty()) { for(Map.Entry<String, String> entry : params.entrySet()) { paramPairs.add(new BasicNameValuePair(entry.getKey(), entry.getValue())); } } //对请求参数进行编码,得到实体数据 UrlEncodedFormEntity entitydata = new UrlEncodedFormEntity(paramPairs, enc); //构造一个请求路径 HttpPost post = new HttpPost(path); //设置请求实体 post.setEntity(entitydata); //浏览器对象 DefaultHttpClient client = new DefaultHttpClient(); //执行post请求 HttpResponse response = client.execute(post); //从状态行中获取状态码,判断响应码是否符合要求 if(response.getStatusLine().getStatusCode()==200) { return true; } return false; } }

相关文章:

  • PCB原理图库
  • mysql相关故障
  • Win7 打开网页超级慢的解决方案
  • Java并发和多线程3:线程调度和有条件取消调度
  • Android之使用Http协议实现文件上传功能
  • poi API大全
  • Authentication和Authrization(上)
  • std::bind()图解
  • perl概述
  • Thinkphp中在本地测试很好,在服务器上出错,有可能是因为debug缓存的问题
  • perl入门--语法和结构(1)
  • 6月15日云栖精选夜读:阿里配管专家解读:如何最优成本搭建非标准的iOS构建集群...
  • Android下实现电话号码归属地的查询
  • 【转】设计模式总结
  • 21、Java并发性和多线程-Java中的锁
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • C# 免费离线人脸识别 2.0 Demo
  • const let
  • Effective Java 笔记(一)
  • extjs4学习之配置
  • java2019面试题北京
  • Java基本数据类型之Number
  • PHP面试之三:MySQL数据库
  • Redis中的lru算法实现
  • vue数据传递--我有特殊的实现技巧
  • 编写高质量JavaScript代码之并发
  • 服务器之间,相同帐号,实现免密钥登录
  • 浏览器缓存机制分析
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 一天一个设计模式之JS实现——适配器模式
  • 仓管云——企业云erp功能有哪些?
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • #ubuntu# #git# repository git config --global --add safe.directory
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (python)数据结构---字典
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (算法设计与分析)第一章算法概述-习题
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (转)程序员疫苗:代码注入
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • ./configure,make,make install的作用
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .Net(C#)常用转换byte转uint32、byte转float等
  • .net/c# memcached 获取所有缓存键(keys)
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉
  • .set 数据导入matlab,设置变量导入选项 - MATLAB setvaropts - MathWorks 中国
  • /usr/bin/env: node: No such file or directory
  • [BJDCTF2020]The mystery of ip