笛里谁知壮士心,沙头空照征人骨。这篇文章主要讲述android中Post方式发送HTTP请求相关的知识,希望能为你提供帮助。
通过Post方式发送HTTP请求的代码逻辑,代码在Eclipse中实现
一.主要步骤
1.准备数据装入mydata(一个字节数组)
2.建立连接,设置请求体
HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setConnectTimeout(
3000
);
connection.set...;
//设置请求体
connection.connect;
【android中Post方式发送HTTP请求】3.通过连接输出数据
OutputStream outputStream = connection.getOutputStream(); outputStream.write(mydata,0,mydata.length);
4.通过连接获取服务器返回结果
connection.getInputStream()
二.demo
import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.net.URLEncoder; import java.util.HashMap; import java.util.Map; public class HttpUtils { private static String PATH = "http://172.24.87.47:8088/myhttp/servlet/LoginAction"; private static URL url; public HttpUtils() {} static{ try { url = new URL(PATH); } catch (MalformedURLException e) { e.printStackTrace(); } }
public static void main(String[] arsg){ Map< String, String> params = new HashMap< String, String> (); params.put("username", "lili"); params.put("password", "123"); String result = sendPostMessage(params,"utf-8"); System.out.println("result-> "+result); }
/** * @param params 填写的url的参数 * @param encode 字节编码 * @return */ public static String sendPostMessage(Map< String, String> params,String encode){ StringBuffer buffer = new StringBuffer(); try {//把请求的主体写入正文!! if(params != null& & !params.isEmpty()){ //迭代器
//Map.Entry 是Map中的一个接口,他的用途是表示一个映射项(里面有Key和Value)
for(Map.Entry< String, String> entry : params.entrySet()){ buffer.append(entry.getKey()).append("="). append(URLEncoder.encode(entry.getValue(),encode)). append("& "); } } //System.out.println(buffer.toString()); //删除最后一个字符& ,多了一个; 主体设置完毕 buffer.deleteCharAt(buffer.length()-1); byte[] mydata = https://www.songbingjia.com/android/buffer.toString().getBytes(); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setConnectTimeout(3000); connection.setDoInput(true); //表示从服务器获取数据 connection.setDoOutput(true); //表示向服务器写数据 connection.setRequestMethod("POST"); //是否使用缓存 connection.setUseCaches(false); //表示设置请求体的类型是文本类型 connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); connection.setRequestProperty("Content-Length", String.valueOf(mydata.length)); connection.connect(); //连接,不写也可以。。??有待了解 //获得输出流,向服务器输出数据 OutputStream outputStream = connection.getOutputStream(); outputStream.write(mydata,0,mydata.length); //获得服务器响应的结果和状态码 int responseCode = connection.getResponseCode(); if(responseCode == HttpURLConnection.HTTP_OK){ return changeInputeStream(connection.getInputStream(),encode); } } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return ""; } /** * 将一个输入流转换成字符串 * @param inputStream * @param encode * @return */ private static String changeInputeStream(InputStream inputStream,String encode) { //通常叫做内存流,写在内存中的 ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); byte[] data = https://www.songbingjia.com/android/new byte[1024]; int len = 0; String result =""; if(inputStream != null){ try { while((len = inputStream.read(data))!=-1){ data.toString(); outputStream.write(data, 0, len); } //result是在服务器端设置的doPost函数中的 result = new String(outputStream.toByteArray(),encode); outputStream.flush(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return result; } }
参考文章:https://www.cnblogs.com/jycboy/p/post01.html 作者:超超boy
推荐阅读
- Android H5调起原生微信或支付宝支付
- 使用Fidder从安卓模拟器获取APP打开网址
- Array.apply(null,{length:6}).map()
- 360文件管理器下载|360文件管理器安卓版下载
- elasticsearch篇之mapping
- 从零开始搭建架构实施Android项目
- 动态规划——Maximum Sum of 3 Non-Overlapping Subarrays
- GDscript中的类
- GDScript关键字