安卓发送post请求

安卓发送post请求

在Android中,提供了标准Java接口HttpURLConnection和Apache接口HttpClient,为客户端HTTP编程提供了丰富的支持。

  在HTTP通信中使用最多的就是GET和POST了,GET请求可以获取静态页面,也可以把参数放在URL字符串的后面,传递给服务器。POST与GET的不同之处在于POST的参数不是放在URL字符串里面,而是放在HTTP请求数据中。

  本文将使用标准Java接口HttpURLConnection,以一个实例演示如何使用POST方式向服务器提交数据,并将服务器的响应结果显示在Android客户端

1.Android中实现

activity_main.xml部分

 
  

import部分

//import部分
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.TextView; 
import android.widget.Toast;
import android.util.Log;

import java.io.InputStream; 
import java.util.HashMap;   
import java.util.Map; 

import java.util.Date;
import java.text.SimpleDateFormat;

public class MainActivity extends Activity  部分

private Button m_butPost;
m_butPost=(Button)findViewById(R.id.butPost);
m_butPost.setOnClickListener(new View.OnClickListener() {
     public void onClick(View v) {
    butPost_OnClick(v);
     }
});

//提交测试
private void butPost_OnClick(View v){
     //请求参数键-值对   
    String strRecSmsMsg="收短信测试";
     //提交
    RecSmsToPost(strRecSmsMsg);
    openToast("提交测试完成");
}
//收到短信 后 提交
private void RecSmsToPost(String strRecSmsMsg){
      String strNowDateTime=getNowDateTime("yyyy-MM-dd|HH:mm:ss");//当前时间
     //参数
     Map
  
    params = new HashMap
   
    (); params.put("RECSMSMSG", strRecSmsMsg); //params.put("name", "李四"); //服务器请求路径 String strUrlPath = "http://192.168.1.9:80/JJKSms/RecSms.php" +"?DateTime=" + strNowDateTime; String strResult=HttpUtils.submitPostData(strUrlPath,params, "utf-8"); m_lblPostResult.setText(strResult); //openToast("提交完成"); } //获取当前时间 private String getNowDateTime(String strFormat){ if(strFormat==""){ strFormat="yyyy-MM-dd HH:mm:ss"; } Date now = new Date(); SimpleDateFormat df = new SimpleDateFormat(strFormat);//设置日期格式 return df.format(now); // new Date()为获取当前系统时间 } //弹出消息 private void openToast(String strMsg){ Toast.makeText(this, strMsg, Toast.LENGTH_LONG).show(); }
   
  

HttpUtils 类部分

 新建 类文件 HttpUtils 其中代码如下:

import java.net.HttpURLConnection;
import java.net.URL;
import java.io.OutputStream; 
import java.io.InputStream;
import java.util.Map;
import java.io.IOException;
import java.net.URLEncoder;
import java.io.ByteArrayOutputStream;

public class HttpUtils {
    /*
     * Function  :   发送Post请求到服务器
     * Param     :   params请求体内容,encode编码格式
     */
    public static String submitPostData(String strUrlPath,Map
  
    params, String encode) { byte[] data = getRequestData(params, encode).toString().getBytes();//获得请求体 try { //String urlPath = "http://192.168.1.9:80/JJKSms/RecSms.php"; URL url = new URL(strUrlPath); HttpURLConnection httpURLConnection = (HttpURLConnection)url.openConnection(); httpURLConnection.setConnectTimeout(3000); //设置连接超时时间 httpURLConnection.setDoInput(true); //打开输入流,以便从服务器获取数据 httpURLConnection.setDoOutput(true); //打开输出流,以便向服务器提交数据 httpURLConnection.setRequestMethod("POST"); //设置以Post方式提交数据 httpURLConnection.setUseCaches(false); //使用Post方式不能使用缓存 //设置请求体的类型是文本类型 httpURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); //设置请求体的长度 httpURLConnection.setRequestProperty("Content-Length", String.valueOf(data.length)); //获得输出流,向服务器写入数据 OutputStream outputStream = httpURLConnection.getOutputStream(); outputStream.write(data); int response = httpURLConnection.getResponseCode(); //获得服务器的响应码 if(response == HttpURLConnection.HTTP_OK) { InputStream inptStream = httpURLConnection.getInputStream(); return dealResponseResult(inptStream); //处理服务器的响应结果 } } catch (IOException e) { //e.printStackTrace(); return "err: " + e.getMessage().toString(); } return "-1"; } /* * Function : 封装请求体信息 * Param : params请求体内容,encode编码格式 */ public static StringBuffer getRequestData(Map
   
     params, String encode) { StringBuffer stringBuffer = new StringBuffer(); //存储封装好的请求体信息 try { for(Map.Entry
    
      entry : params.entrySet()) { stringBuffer.append(entry.getKey()) .append("=") .append(URLEncoder.encode(entry.getValue(), encode)) .append("&"); } stringBuffer.deleteCharAt(stringBuffer.length() - 1); //删除最后的一个"&" } catch (Exception e) { e.printStackTrace(); } return stringBuffer; } /* * Function : 处理服务器的响应结果(将输入流转化成字符串) * Param : inputStream服务器的响应输入流 */ public static String dealResponseResult(InputStream inputStream) { String resultData = null; //存储处理结果 ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); byte[] data = new byte[1024]; int len = 0; try { while((len = inputStream.read(data)) != -1) { byteArrayOutputStream.write(data, 0, len); } } catch (IOException e) { e.printStackTrace(); } resultData = new String(byteArrayOutputStream.toByteArray()); return resultData; } }
    
   
  

2.服务器端的准备

  在服务器端我采用wamp方式,当然其它方式也可以。 创建RecSms.php 文件 内容如下:


  ";

foreach($_REQUEST as $k=>$v){
    echo $k;echo "--";
    echo $v;echo "
";
}

WriteLog('你好 RecSms.php ---------');    
    
foreach($_POST as $k=>$v){    
    WriteLog( $k .'--' .$v);    
}    
foreach($_GET as $k=>$v){    
    WriteLog( $k .'--' .$v);    
}    
 
?>

将提交的数据写入Log\Log.php文件中。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

若♡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值