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

简介: 创建一个服务器程序,用来接收和返回数据: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

目录
相关文章
|
5月前
|
缓存 人工智能 架构师
释放数据潜力:利用 MCP 资源让大模型读懂你的服务器
MCP(Model Control Protocol)资源系统是将服务器数据暴露给客户端的核心机制,支持文本和二进制两种类型资源。资源通过唯一URI标识,客户端可通过资源列表或模板发现资源,并使用`resources/read`接口读取内容。MCP还支持资源实时更新通知及订阅机制,确保动态数据的及时性。实现时需遵循最佳实践,如清晰命名、设置MIME类型和缓存策略,同时注重安全性,包括访问控制、路径清理和速率限制等。提供的示例代码展示了如何用JavaScript和Python实现资源支持。
695 80
|
5月前
|
Python
使用Python实现multipart/form-data文件接收的http服务器
至此,使用Python实现一个可以接收 'multipart/form-data' 文件的HTTP服务器的步骤就讲解完毕了。希望通过我的讲解,你可以更好地理解其中的逻辑,另外,你也可以尝试在实际项目中运用这方面的知识。
264 69
|
4月前
|
弹性计算 NoSQL 数据库
阿里云服务器如何备份数据?
阿里云服务器数据备份有多种方法,用户可按需选择。主要方式包括:1)快照备份,创建云盘的时间点拷贝,支持定期备份与数据恢复;2)数据库备份DBS,适用于多种环境的数据库备份,涵盖本地及多云场景;3)云备份Cloud Backup,提供统一灾备平台,支持ECS整机、数据库、文件系统等全方位备份,保障数据安全。
|
4月前
|
存储 数据库 Python
使用HTTP POST协议将本地压缩数据发送到服务器
总的来说,使用HTTP POST协议将本地压缩数据发送到服务器是一个涉及多个步骤的过程,包括创建压缩文件,设置HTTP客户端,发送POST请求,以及服务器端的处理。虽然这个过程可能看起来复杂,但一旦你理解了每个步骤,就会变得相对简单。
160 19
|
5月前
|
关系型数据库 MySQL Linux
在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾
以上就是在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾的步骤。这个过程就像是一场接力赛,数据从MySQL数据库中接力棒一样传递到备份文件,再从备份文件传递到其他服务器,最后再传递回MySQL数据库。这样,即使在灾难发生时,我们也可以快速恢复数据,保证业务的正常运行。
272 28
|
5月前
|
安全 网络安全 定位技术
网络通讯技术:HTTP POST协议用于发送本地压缩数据到服务器的方案。
总的来说,无论你是一名网络开发者,还是普通的IT工作人员,理解并掌握POST方法的运用是非常有价值的。它就像一艘快速,稳定,安全的大船,始终为我们在网络海洋中的冒险提供了可靠的支持。
170 22
|
5月前
|
Web App开发 前端开发 JavaScript
如何模拟浏览器行为获取网页中的隐藏表单数据?
如何模拟浏览器行为获取网页中的隐藏表单数据?
|
6月前
|
前端开发 Cloud Native Java
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
|
5月前
服务器数据恢复—NTFS分区误格式化数据怎样挽回?
NTFS文件系统下格式化在理论上不会对数据造成太大影响,但有可能造成部分文件目录结构丢失的情况。下面介绍一个人为误操作导致服务器磁盘阵列中的NTFS文件系统分区被格式化后的服务器数据恢复案例。
|
8月前
|
存储 安全 网络安全
服务器感染了.baxia勒索病毒,如何确保数据文件完整恢复?
近年来,勒索病毒如.baxia不断演变,利用漏洞、社交工程等手段加密文件,威胁范围扩大。加密货币的兴起使其支付方式更匿名,追踪困难。技术支持尤为重要,添加技术服务号(shuju315),专业团队提供数据恢复方案。面对复杂解密要求,包括赎金支付、个人信息提供和执行特定操作,需保持冷静并寻求帮助。防御措施包括加强安全意识、定期备份数据、安装杀毒软件、避免未知文件、更新系统及制定应急响应计划。
345 11