[引用]java模拟游览器进行post和get

Android测试教程13--模拟服务器MockServer之Moco详细介绍 前面一篇介绍了如何用mockito来测试我们的一些异步任务,例如网络请求时候的异步回调。 现在做进一步的介绍,一个模拟我们的服务器的东东–moco先运行起来请先下载这个文件moco.jar,接着,在我们的桌面新建一个文件data.json,用记事本打开,粘贴下面的东东 ,具体意思后面介绍[{ "request" : { "uri" : "/hello" }, "response" : { "tex 阅读详情
  使用HttpURLConnection发送post和get请求

1、http://blog.youkuaiyun.com/pandazxx/archive/2007/06/18/1657109.aspx

2、http://blog.youkuaiyun.com/pandazxx/archive/2007/06/20/1660008.aspx 

但我们常常会碰到这样一种情况:

通过HttpURLConnection来模拟模拟用户登录Web服务器,服务器使用cookie进行用户认证。在模拟登录时,Post表单数据后可以正确登录(登陆成功时会response一个cookie,然后redirect到main page,不成功则redirect到login page),但是在使用HttpURLConnection再次连接服务器其他页面(或者即使是当前的response里是redirect的page)时,服务器都会认为是全新的一个Session。

解决方法有2步:

1. 调用HttpURLConnection (send post request to login page)的setInstanceFollowRedirects()方法,参数为false (这样不会去获取redirect page)

2. 获取HttpURLConnection send post request to login page的session id,然后在之后每一次的connection里都加上该session id

Example:

    String sessionId =  "";  
     public  static  void  sendLoginRequest()  throws  IOException {
       URL loginUrl =  new  URL( "http://xxx" );
       HttpURLConnection connection = (HttpURLConnection) loginUrl.openConnection();
 
 
        // Output to the connection. Default is
        // false, set to true because post
        // method must write something to the
        // connection
        //  设置是否向 connection 输出,因为这个是 post 请求,参数要放在
        // http 正文内,因此需要设为 true
       connection.setDoOutput( true );
        // Read from the connection. Default is true.
       connection.setDoInput( true );
        // Set the post method. Default is GET
       connection.setRequestMethod( "POST" );
        // Post cannot use caches
        // Post  请求不能使用缓存
       connection.setUseCaches( false );
 
        // This method takes effects to
        // every instances of this class.
        // URLConnection.setFollowRedirects 是 static 函数,作用于所有的 URLConnection 对象。
        // connection.setFollowRedirects(true);
      
        // This methods only
        // takes effacts to this
        // instance.
        // URLConnection.setInstanceFollowRedirects 是成员函数,仅作用于当前函数
       connection.setInstanceFollowRedirects( false);
      
        // Set the content type to urlencoded,
        // because we will write
        // some URL-encoded content to the
        // connection. Settings above must be set before connect!
        //  配置本次连接的 Content-type ,配置为 application/x-www-form-urlencoded 的
        //  意思是正文是 urlencoded 编码过的 form 参数,下面我们可以看到我们对正文内容使用 URLEncoder.encode
        //  进行编码
       connection.setRequestProperty( "Content-Type" ,
               "application/x-www-form-urlencoded" );
        //  连接,从 postUrl.openConnection() 至此的配置必须要在 connect 之前完成,
        //  要注意的是 connection.getOutputStream 会隐含的进行 connect 。
       connection.connect();
 
       DataOutputStream out =  new  DataOutputStream(connection
              .getOutputStream());
 
          // 要传的参数
       String content = URLEncoder.encode( "username", "UTF-8") + "="
              + URLEncoder.encode("XXX", "UTF-8");
       content += "&" + URLEncoder.encode("password", "UTF-8") + "="
              + URLEncoder.encode("XXXX", "UTF-8");
 
        // DataOutputStream.writeBytes 将字符串中的 16 位的 unicode 字符以 8 位的字符形式写道流里面
       out.writeBytes(content);
 
       out.flush();
       out.close();  // flush and close
 
           //Get Session ID
       String key =  "" ;
        if (connection != null) {
           for (int i = 1; (key = connection.getHeaderFieldKey(i)) != null; i++) {
               if (key.equalsIgnoreCase("set-cookie")) {
                  sessionId = connection.getHeaderField(key);
                  sessionId = sessionId.substring(0, sessionId.indexOf( ";"));
              }
           }
       }     
       connection.disconnect();
    }
 

 然后之后每一次connection都要加上这个session id:

URL url = new URL("http:......");
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
connection.setRequestProperty("Cookie",this.sessionId);
connection.connect();
springMVC4(5)RestTemplate控制层单元测试 在前面我们进行web测试,总要在游览器进行,数据组装、请求方法更给等都极为麻烦。 RestTemplate是Spring提供的一个web层测试模板类,我们可以通过RestTemplate在客户端方便的进行web层功能测试。它支持REST风格的URL,而且具有AnnotationMethodHandlerAdapter的数据转换器HttpMessageConverters的装配功能。RestTemp 阅读详情

相关推荐

物联网开发131 - Micropython ESP32 C3连接TB6600驱动42BYGH39步进电机

如何使用合宙ESP32 C3连接TB6600驱动42BYGH39步进电机,实现控制步进电机正反转和旋转指定角度等

zhusongziye的博客 2377

android使用HttpURLConnection发送Post/Get请求

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33881753的博客 499

STM32 ADC精准采集12V电池电压:从分压电路到软件校准全解析

本文详细解析了STM32 ADC精准采集12V电池电压的全过程,涵盖分压电路设计、电阻选型、ADC配置优化及软件校准方法。针对电池电压监测中的噪声、温漂等挑战,提供了硬件滤波与软件过采样等实战技巧,确保测量精度达到1%以内,满足嵌入式设备对电源管理的严苛要求。

tech5的博客 1016

httpurlconnection 和 httpclient 发送get、post请求

import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.http.MediaType; import java.io.*; import java.net.HttpURLConn

Tracyclock的博客 614

从“手扫感应灯”拆解开始:聊聊三极管放大电路在生活中的那些实用设计

本文通过拆解手扫感应灯,深入探讨了三极管放大电路在日常生活中的实用设计。从红外信号放大到环境干扰应对,详细解析了电路配置技巧和调试方法,并延伸至声控灯、电容感应等智能家居应用,帮助读者理解并掌握三极管放大电路的核心原理与实践技巧。

weixin_42627853的博客 390

Zotero on Mac: 高效文献管理与引用指南

本文为Mac用户提供了一份全面的Zotero高效文献管理与引用指南。从安装配置、文献收集管理、PDF深度阅读与笔记,到在Word中无缝插入引用和生成参考文献,详细讲解了核心工作流。同时推荐了ZotFile、Better BibTeX等必备插件,并介绍了利用同步与WebDAV实现跨设备无缝衔接的方法,助力研究者构建个人数字知识库,极大提升学术研究效率。

weixin_29281941的博客 1179

HttpURLConnection 向服务器发送post和get请求 并接收响应

HttpURLConnection 向服务器发送post和get请求 并接收响应

BusyMonkey 2277

FanucROBOGUIDE软件二次开发:使用ROBOGUIDEAPI进行编程

菜单栏:位于界面顶部,提供文件、编辑、视图、插入、格式、工具、窗口和帮助等选项。工具栏:包含常用的工具按钮,如新建、打开、保存、运行、停止、机器人控制等。工作站视图:显示工作站的3D模型,用户可以在这里放置机器人、工件、工具和其他设备。机器人控制面板:用于控制机器人运动,包括手动移动、程序编辑和运行。程序编辑器:在这里可以编写和编辑机器人程序,支持Fanuc的R-30iB Plus和R-30iB控制柜的程序格式。状态栏:显示当前工作站的状态信息,如机器人位置、程序状态等。

kkchenjj的博客 1411

HttpUrlConnection用get和post请求发送参数

post请求:final String nameValue = username.getText().toString(); final String passValue = password.getText().toString(); new Thread(){ public void r

王志强_android_专栏 4141

MathType公式使用技巧汇总——Mathtype怎么在word中编辑公式?论文中公式有哪技巧?有哪些注意事项?论文中的公式怎么写?

如果word中到公式编号(2-1)中间的符号如下图........ .......类似与省略号的,这是手动打的空格,公式和编号的位置都是手动敲空格操作的,这种就只是使用MathType写了公式而已,格式上还是很不方便的。**如果要修改公示,直接双击文档中的公式,就会自动弹出MathType公式编辑窗口,进行修改。如果要修改公示,直接双击文档中的公式,就会自动弹出MathType公式编辑窗口,进行修改。而第二种,是公式里面带的括号符号,他是可以随着公式结构自适应变化的。这时需要将公式插入到一行文字的某处,

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 5万+

【Java开发者必看】LangChain4j实战指南:使用AIService轻松集成聊天记忆Chat Memory到SpringBoot应用,通过封装多轮复杂对话,使聊天记忆的实现变得简单

聊天记忆是指在与用户的多轮对话过程中,能够记住之前的交互内容,从而提供更加连贯和个性化的回复。LangChain4j支持通过ChatMemoryProvider接口实现聊天记忆功能。

Spring Boot-Common On With You 448

java 模拟浏览器进行get和post请求

原文:https://blog.youkuaiyun.com/wild46cat/article/details/52513012利用java的URLConnection能够模拟浏览器访问服务器的资源,下面是一个简答的例子:[java] view plain copy package com.xueyoucto.xueyou;      import java.io.BufferedReader;  impo...

Quincylk的专栏 1937

Python 爬虫实战:医学临床指南爬取(含 PDF 解析与结构化存储)

在当今数字化时代,医学临床指南作为医生进行科学诊疗的重要参考资料,包含大量经过临床验证的诊疗路径和建议。这些指南通常发布在权威医学网站上,数量庞大且更新频繁。如何自动化地抓取并存储这些指南,成为医疗数据分析、医学研究以及医疗 AI 模型训练等工作的关键第一步。本文将系统讲解如何利用 Python 爬虫技术从权威医学网站爬取临床指南内容,并实现 PDF 解析与结构化存储。

u014481728的博客 451

一个模拟我们的服务器小应用 mock之一

一个模拟我们的服务器小应用 mock之一先运行起来请先下载这个文件moco.jar,接着,在我们的桌面新建一个文件data.json,用记事本打开,粘贴下面的东东 ,具体意思后面介绍[{ "request" : { "uri" : "/hello" }, "response" : { "text" : "Hello World !!!" } } ] 保存好,然后打开我们的终端或者CMD。

風悠_吕的博客 541

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

模拟服务器MockServer之Moco详细介绍

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33747129的博客 342

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Mocoserver使用介绍

先运行起来请先下载这个文件moco.jar,接着,在我们的桌面新建一个文件data.json,用记事本打开,粘贴下面的东东 ,具体意思后面介绍[{ "request" : { "uri" : "/hello" }, "response" : { "text" : "Hello World !!!" } } ] 保存好,然后打开我们的终端或者CMD。 输入下面的命令java -jar mo

http_tester的博客 2531

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

JAVA爬虫(一)

网络爬虫 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁,自动索引,模拟程序或者蠕虫。 使用环境 采用环境为: JDK1.8 IDEA和自带的Maven 导入pom.xml依赖 首先导入http访问 <dependencies> <!-- https://mvnrepository.com/artifact/org.apache.httpcompo

weixin_47701814的博客 224

HttpClient【一】

之前见过这东西确不知道是干嘛的,后来学习了下才发现,原来它就相当于一个游览器客户端能够发出get和post请求,然后获得返回的数据。 首先新建一个java项目,然后添加所需jar包。 然后就是代码的编写了,也比较简单。 package cn.sp.test01; import java.util.ArrayList; import java.util.List; import org

stupid_Java_learner的博客 4274

java开发工具以及辅助软件

一、根据接口路径模拟发送Post、Get、Put等请求 1、下载谷歌游览器  (博主不知道这个插件能不能独立运行,所以需要下载谷歌游览器) 2、下载Postman插件 网盘:链接:https://pan.baidu.com/s/19tLCbcQAlKKVgwPdk4-PKw   提取码:gfni  官网:https://www.getpostman.com/   随笔记录,随时更新...

weixin_41796611的博客 569

https协议如何通过X509TrustManager接口实现自己创建的证书

开通了一个https协议,但是不是国际认证的,自己做的证书,访问一个接口的时候比如 https:/xx.xx.xx.xx/a?c=d的时候,如果在游览器访问,需要用户确认的。如果我要模拟服务器向这个接口发送请求,就会报错误。我的原代码是: 1 创建信任管理器   /** * 信任管理器 * * @author liufeng * @date 2013-04-10 */...

wangmingbin的博客 9894
下一篇: 时间分隔多用户同时注册的方法
java_yao
博客等级 码龄18年 6粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值