zoukankan      html  css  js  c++  java
  • java自动化测试http请求post

      继上文的get请求http://www.cnblogs.com/xuezhezlr/p/7667995.html的简单讲解后,这篇文章大概说一下我所遇到的主要的post请求以及他的测试代码

      上文介绍到,get请求是指大多数我们浏览器中输入的url回车或者提交的参数来触发的,那么post请求是啥时候呢?其实post请求大多数是服务器之间或者代码之间的一种请求方式,比如点击一个按钮所触发的后续的操作,所以从直观来看,post请求直接放到浏览器上多半是打不开的,get请求可以直接把url放在浏览器打开,下面是post代码

        public Map<String,Object> doPost(String url, Map parameterMap) throws Exception {

    /* Translate parameter map to parameter date string */
    StringBuffer parameterBuffer = new StringBuffer();
    if (parameterMap != null) {
    Iterator iterator = parameterMap.keySet().iterator();
    String key = null;
    String value = null;
    while (iterator.hasNext()) {
    key = (String)iterator.next();
    if (parameterMap.get(key) != null) {
    value = (String)parameterMap.get(key);
    } else {
    value = "";
    }
    parameterBuffer.append(key).append("=").append(URLEncoder.encode(value,charset));
    if (iterator.hasNext()) {
    parameterBuffer.append("&");
    }
    }
    }

    System.out.println("POST parameter : " + parameterBuffer.toString());

    URL localURL = new URL(url);

    URLConnection connection = openConnection(localURL);
    HttpURLConnection httpURLConnection = (HttpURLConnection)connection;

    httpURLConnection.setDoOutput(true);
    httpURLConnection.setRequestMethod("POST");
    httpURLConnection.setRequestProperty("Accept-Charset", "gbk");
    httpURLConnection.setRequestProperty("deviceId", "5555283CB8B84F02866D916B3FFD9909");
    httpURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
    httpURLConnection.setRequestProperty("User-Agent", "IPSCheck/3.1.0 (iPad; iOS 10.2.1; Scale/2.00)");
    httpURLConnection.setRequestProperty("Content-Length", String.valueOf(parameterBuffer.length()));
    OutputStream outputStream = null;
    OutputStreamWriter outputStreamWriter = null;
    InputStream inputStream = null;
    InputStreamReader inputStreamReader = null;
    BufferedReader reader = null;
    StringBuffer resultBuffer = new StringBuffer();
    String tempLine = null;

    try {
    outputStream = httpURLConnection.getOutputStream();
    outputStreamWriter = new OutputStreamWriter(outputStream);

    outputStreamWriter.write(parameterBuffer.toString());
    outputStreamWriter.flush();

    if (httpURLConnection.getResponseCode() >= 300) {
    throw new Exception("HTTP Request is not success, Response code is " + httpURLConnection.getResponseCode());
    }

    inputStream = httpURLConnection.getInputStream();
    inputStreamReader = new InputStreamReader(inputStream);
    reader = new BufferedReader(inputStreamReader);

    while ((tempLine = reader.readLine()) != null) {
    resultBuffer.append(tempLine);
    }

    } finally {
    if (outputStreamWriter != null) {
    outputStreamWriter.close();
    }
    if (outputStream != null) {
    outputStream.close();
    }
    if (reader != null) {
    reader.close();
    }
    if (inputStreamReader != null) {
    inputStreamReader.close();
    }
    if (inputStream != null) {
    inputStream.close();
    }

    }
    String mapStr = resultBuffer.toString();
    System.out.println(mapStr);
    JSONObject jasonObject = JSONObject.parseObject(mapStr);
    Map<String,Object> map = (Map<String,Object>)jasonObject;
    return map;
    }
    上文就是一个post请求,这种post请求的方式总得来说是,将参数map变为一个与get请求相近的字符串a=1&b=2&c=3的形式,在与url结合进行post请求
    其实post我所见过的还有两种形式,今天也说说http请求的大概模样

    上图是一个http请求的图样,其实http请求包含请求request和response两部分,也就是请求和响应,每一个部分还包含body和header两部分

    上图是请求header和body中的内容

    header中包含很多参数,在代码中可以使用

    httpURLConnection.setRequestProperty("User-Agent", "IPSCheck/3.1.0 (iPad; iOS 10.2.1; Scale/2.00)");将一个数值以键值对的形式放进header中

    比较重要的参数是

    User-Agent:保存着用户登录的来源,有浏各种版本的浏览器,机器,甚至机型java等信息在其中

    host:请求的域名,一个接口可以部署在不同域名上

    第一行是请求的方式以及url,可以与host拼接为完整的url

    cookie:保存着用户登录信息等参数

    Content-Type:保存着请求的一个属性,一般的是有application/x-www-form-urlencoded和application/json两种
    所以,get请求会把参数放在body中,然后把url与body拼接在一起做get请求
    post请求会把参数放在body中,然后body和header一起进行post请求
    除了上述键值对存在的post请求外,我还遇到过2种
    1body中放的是json串的
    2参数放在url中进行拼接,而body中不放任何参数的

    总得来说,这就是post请求和get请求吧,,,如果有时间可以熟练使用上述代码,来模拟抓到的数据包进行请求的,这也是下一篇文章要讲的东西
  • 相关阅读:
    linux学习之linux的hostname修改详解《转》
    不想作死系列--win7远程linux桌面之vncserver
    不想作死系列---virtualbox最小化安装centos6.5
    基于支持向量机的车牌识别-- opencv2.4.7+vs2012环境搭建
    python文件的中文处理以及个人思路
    haskell学习笔记<1>--基本语法
    提醒
    C语言矩阵传递给函数的方法
    0x01数据结构——C语言实现(二叉查找树)
    0x01数据结构——C语言实现(二叉树)
  • 原文地址:https://www.cnblogs.com/xuezhezlr/p/7685750.html
Copyright © 2011-2022 走看看