模拟浏览器向服务器发送和接收数据

简介: 创建一个服务器程序,用来接收和返回数据:public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.

创建一个服务器程序,用来接收和返回数据:

public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    System.out.println(request.getMethod());                //获取请求方式
    System.out.println(request.getHeader("referer"));       //获取请求页面
    System.out.println(request.getParameter("name"));       //获取参数
    response.getOutputStream().write("Hello".getBytes());   //向浏览器回送数据
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    doGet(request, response);
}

接下来,再创建一个Java程序向这个服务器程序发送请求,类 HttpURLConnection提供方法获取和发送请求数据.但是构造方法

    protected HttpURLConnection(URL u)

表明我们不能直接创建这个对象,也没有任何静态方法能够返回这个对象.于是我们需要绕一把..先获得 URL对象,再利用openConnection()返回HttpURLConnection对象:

public void sendHttp() throws IOException{  
    URL url = new URL("http://localhost:8080/ImitateRequest/servlet/servlet");    //设置要访问的链接  
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();            //获取HttpURLConnection的对象  
      
    conn.setDoOutput(true);                      //默认值为false,不能传递参数  
    conn.setRequestMethod("POST");                                                //设置请求方式  
    conn.setRequestProperty("referer", "http://www.sina.com/index.html");  
    OutputStream out = conn.getOutputStream();  
    out.write("name=aaaa".getBytes());           //向服务器发送一个值为"aaaa"的name参数,如果conn的DoOutput属性值为false,此处将抛出异常  
      
    conn.getResponseCode();                      //获取响应状态码  
}  

以上是发送一次请求需要掌握的方法,接下来是读取一次请求:

public void readHttp() throws IOException{
        URL url = new URL("http://localhost:8080/ImitateRequest/servlet/servlet");    //设置请求的链接
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        
        System.out.println(conn.getResponseCode());                      //查看响应状态码
        System.out.println(conn.getHeaderField("Content-Length"));       //响应文本内容的长度
        InputStream in = conn.getInputStream();                          //获取一个和服务器返回的内容相关联的流
        try{
            int len = 0;
            byte[] buffer = new byte[1024];
            while((len = in.read(buffer))>0){
                System.out.println(new String(buffer,0,len));    //输出到控制台
            }
        }finally{
            if(in!=null)
                try{
                    in.close();
                }catch(Exception e){
                }
        }
    } 

常用的一些HTTP协议请求头:

Request

GET /h.gif?pid=113&monkey=cool HTTP/1.1

请求方式  请求路径  请求版本

Accept

image/png, image/svg+xml, image/*;q=0.8, */*;q=0.5

浏览器可接收的类型

Referer

http://hao123.com/

来源路径

Accept-Language

zh-CN

浏览器可以接收的语言

User-Agent

Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)

浏览器的厂商信息

Content-Type

text/html; charset=UTF-8

数据的内容类型

Accept-Encoding

gzip, deflate

浏览器可以接收压缩后的数据

Host

nsclick.baidu.com

请求的主机IP和端口号

Content-Length

289

用于指定数据的总长度

Connection

Keep-Alive

维持一个活动连接

Cache-Control

no-cache

缓存情况

Cookie

BAIDUID=304614CF0781D6FABA00280E60983AF5:FG=1

COOKIE

目录
相关文章
|
2月前
|
运维 Prometheus 监控
如何在测试环境中保持操作系统、浏览器版本和服务器配置的稳定性和一致性?
如何在测试环境中保持操作系统、浏览器版本和服务器配置的稳定性和一致性?
|
2天前
|
存储 安全 网络安全
服务器感染了.baxia勒索病毒,如何确保数据文件完整恢复?
近年来,勒索病毒如.baxia不断演变,利用漏洞、社交工程等手段加密文件,威胁范围扩大。加密货币的兴起使其支付方式更匿名,追踪困难。技术支持尤为重要,添加技术服务号(shuju315),专业团队提供数据恢复方案。面对复杂解密要求,包括赎金支付、个人信息提供和执行特定操作,需保持冷静并寻求帮助。防御措施包括加强安全意识、定期备份数据、安装杀毒软件、避免未知文件、更新系统及制定应急响应计划。
28 11
|
2月前
|
XML 前端开发 JavaScript
PHP与Ajax在Web开发中的交互技术。PHP作为服务器端脚本语言,处理数据和业务逻辑
本文深入探讨了PHP与Ajax在Web开发中的交互技术。PHP作为服务器端脚本语言,处理数据和业务逻辑;Ajax则通过异步请求实现页面无刷新更新。文中详细介绍了两者的工作原理、数据传输格式选择、具体实现方法及实际应用案例,如实时数据更新、表单验证与提交、动态加载内容等。同时,针对跨域问题、数据安全与性能优化提出了建议。总结指出,PHP与Ajax的结合能显著提升Web应用的效率和用户体验。
70 3
|
2月前
|
存储 运维 算法
服务器数据恢复—raid6阵列硬盘重组raid5阵列如何恢复raid6阵列数据?
服务器存储数据恢复环境: 存储中有一组由12块硬盘组建的RAID6阵列,上层linux操作系统+EXT3文件系统,该存储划分3个LUN。 服务器存储故障&分析: 存储中RAID6阵列不可用。为了抢救数据,运维人员使用原始RAID中的部分硬盘重新组建RAID并进行了初始化。 初始化开始一段时间后,运维人员察觉到情况有异后强制终止初始化,这个时候初始化已经完成一半以上。数据部分已被不可逆的破坏。
|
3月前
|
存储 数据挖掘
服务器数据恢复—用RAID5阵列中部分盘重建RAID5如何恢复原raid5阵列数据?
服务器数据恢复环境: 一台服务器挂接一台存储,该存储中有一组由5块硬盘组建的RAID5阵列。 服务器故障: 存储raid5阵列中有一块硬盘掉线。由于RAID5的特性,阵列并没有出现问题。工作一段时间后,服务器出现故障,用户方请人维修。维修人员在没有了解故障磁盘阵列环境的情况下,用另外4块硬盘(除去掉线的硬盘)重新创建了一组全新的RAID5阵列并完成数据同步,导致原raid5阵列数据全部丢失。
|
3月前
|
网络协议 Ubuntu Linux
gpg从公钥服务器接收失败(gpg: keyserver receive failed: Server indicated a failure)
通过上述步骤,大多数情况下应该能够解决GPG从公钥服务器接收失败的问题。如果问题依旧存在,可能需要进一步调查与公钥服务器相关的更深层次的技术问题,或者考虑在相关社区论坛寻求帮助。
683 1
|
3月前
|
Python
Flask学习笔记(三):基于Flask框架上传特征值(相关数据)到服务器端并保存为txt文件
这篇博客文章是关于如何使用Flask框架上传特征值数据到服务器端,并将其保存为txt文件的教程。
43 0
Flask学习笔记(三):基于Flask框架上传特征值(相关数据)到服务器端并保存为txt文件
|
3月前
|
SQL 分布式计算 关系型数据库
Hadoop-21 Sqoop 数据迁移工具 简介与环境配置 云服务器 ETL工具 MySQL与Hive数据互相迁移 导入导出
Hadoop-21 Sqoop 数据迁移工具 简介与环境配置 云服务器 ETL工具 MySQL与Hive数据互相迁移 导入导出
125 3
|
3月前
|
弹性计算 Linux 数据库
阿里云国际版如何迁移Linux云服务器系统盘中的数据
阿里云国际版如何迁移Linux云服务器系统盘中的数据
|
3月前
|
NoSQL 前端开发 MongoDB
前端的全栈之路Meteor篇(三):运行在浏览器端的NoSQL数据库副本-MiniMongo介绍及其前后端数据实时同步示例
MiniMongo 是 Meteor 框架中的客户端数据库组件,模拟了 MongoDB 的核心功能,允许前端开发者使用类似 MongoDB 的 API 进行数据操作。通过 Meteor 的数据同步机制,MiniMongo 与服务器端的 MongoDB 实现实时数据同步,确保数据一致性,支持发布/订阅模型和响应式数据源,适用于实时聊天、项目管理和协作工具等应用场景。

热门文章

最新文章