Socket实现的HTTP协议查看器(GET/POST/UPLOAD)

Python网络攻防基础:从HTTP协议解析到代理拦截实战 HTTP/HTTPS协议是Web应用通信的基石,理解其报文结构和工作原理是网络安全与测试的必备基础。协议定义了客户端与服务器之间请求与响应的标准格式,通过解析原始数据包,可以深入理解会话管理、参数传递等核心机制。掌握协议细节的技术价值在于能够精准识别异常流量、构造测试用例以及分析潜在漏洞。在安全测试、爬虫开发和API调试等应用场景中,对协议的深入理解使得工具不再是黑盒。本文通过Python的socket、http.client和requests库,从底层套接字通信到高级请求处理,逐步演示如何手动构造HTTP 阅读详情

本文用于初学者熟悉Http协议的一些细节,特别是常见的GET/POST(Upload)三种表单提交方式的数据格式。
原文地址: http://www.java2000.net/p9925

代码如下
  1. package test.io;
  2. import java.net.*;
  3. import java.io.*;
  4. /**
  5.  * 一个简单的Socket实现的HTTP响应服务器。<br>
  6.  * 只用于熟悉HTTP协议的目的,可以看到浏览器发过来的数据格式。
  7.  * 
  8.  * @author 赵学庆 www.java2000.net
  9.  */
  10. public class MyWebServer {
  11.   public static void main(String[] args) {
  12.     Socket socket = null;
  13.     try {
  14.       // 创建一个监听8000端口的服务器Socket
  15.       ServerSocket s = new ServerSocket(8000, 3);
  16.       System.out.println("MyWebServer等待来自浏览器的连接/n");
  17.       while (true) {
  18.         socket = s.accept();
  19.         System.out.println("连接已建立。端口号:" + socket.getPort());
  20.         new MyWebServerThread(socket).start();
  21.       }
  22.     } catch (IOException e) {
  23.       e.printStackTrace();
  24.     }
  25.   }
  26. }
  27. class MyWebServerThread extends Thread {
  28.   private Socket socket;
  29.   MyWebServerThread(Socket socket) {
  30.     this.socket = socket;
  31.   }
  32.   @Override
  33.   public void run() {
  34.     try {
  35.       InputStreamReader is = new InputStreamReader(socket.getInputStream());
  36.       char[] bs = new char[2048];
  37.       PrintStream out;
  38.       out = new PrintStream(socket.getOutputStream());
  39.       StringBuilder msg = new StringBuilder();
  40.       // 如果10毫秒还没有数据,则视同没有新的数据了。
  41.       // 因为有Keep-Alive的缘故,浏览器可能不主动断开连接的。
  42.       // 实际应用,会根据协议第一行是GET还是 POST确定。
  43.       socket.setSoTimeout(10);
  44.       //
  45.       // 此处读入请求数据并做相应的处理
  46.       //
  47.       int len = -1;
  48.       try {
  49.         while ((len = is.read(bs)) != -1) {
  50.           msg.append(bs, 0, len);
  51.           msg.append("/n");
  52.         }
  53.       } catch (Exception ex) {
  54.         // ex.printStackTrace();
  55.       }
  56.       // 下面是由服务器直接生成的主页内容
  57.       // 1、首先向浏览器输出响应头信息
  58.       out.println("HTTP/1.1 200 OK");
  59.       out.println("Content-Type:text/html;charset:GBK");
  60.       out.println();
  61.       // 2、输出主页信息
  62.       out
  63.           .println("<HTML><BODY>"
  64.               + "<center>"
  65.               + "<H1>HTTP协议测试服务器,当前时间:"
  66.               + new java.util.Date()
  67.               + "</h1>"
  68.               + "<form method='get'>username:<input type='text' name='username'/>password:<input type='text' name='password'/><input type='submit' value='GET测试'/></form><br/>"
  69.               + "<form method='post'>username:<input type='text' name='username'/>password:<input type='text' name='password'/><input type='submit' value='POST测试'/></form><br/>"
  70.               + "<form method='post'  enctype='multipart/form-data'>phototitle:<input type='text' name='phototitle'/>photo:<input type='file' name='photo'/><input type='submit' value='Upload测试'/></form>"
  71.               + "</center>您提交的数据如下:<pre>" + msg.toString() + "</pre></BODY></HTML>");
  72.       out.flush();
  73.       out.close();
  74.       is.close();
  75.       System.out.println("close");
  76.       // 关闭连接
  77.       socket.close();
  78.     } catch (IOException e) {
  79.       e.printStackTrace();
  80.     }
  81.   }
  82. }

GET的运行结果演示
  1. GET /?username=111&password=222 HTTP/1.1
  2. Host: 127.0.0.1:8000
  3. User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.2; zh-CN; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1
  4. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
  5. Accept-Language: zh-cn,zh;q=0.5
  6. Accept-Encoding: gzip,deflate
  7. Accept-Charset: gb2312,utf-8;q=0.7,*;q=0.7
  8. Keep-Alive: 300
  9. Connection: keep-alive
  10. Referer: http://127.0.0.1:8000/?username=1&password=2 

普通POST的结果演示
  1. POST /?username=111&password=222 HTTP/1.1
  2. Host: 127.0.0.1:8000
  3. User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.2; zh-CN; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1
  4. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
  5. Accept-Language: zh-cn,zh;q=0.5
  6. Accept-Encoding: gzip,deflate
  7. Accept-Charset: gb2312,utf-8;q=0.7,*;q=0.7
  8. Keep-Alive: 300
  9. Connection: keep-alive
  10. Referer: http://127.0.0.1:8000/?username=111&password=222
  11. Content-Type: application/x-www-form-urlencoded
  12. Content-Length: 25
  13. username=111&password=222

POST文件上传的结果演示
  1. POST /?username=111&password=222 HTTP/1.1
  2. Host: 127.0.0.1:8000
  3. User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.2; zh-CN; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1
  4. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
  5. Accept-Language: zh-cn,zh;q=0.5
  6. Accept-Encoding: gzip,deflate
  7. Accept-Charset: gb2312,utf-8;q=0.7,*;q=0.7
  8. Keep-Alive: 300
  9. Connection: keep-alive
  10. Referer: http://127.0.0.1:8000/?username=111&password=222
  11. Content-Type: multipart/form-data; boundary=---------------------------23757983230932
  12. Content-Length: 1704
  13. -----------------------------23757983230932
  14. Content-Disposition: form-data; name="phototitle"
  15. 12
  16. -----------------------------23757983230932
  17. Content-Disposition: form-data; name="photo"; filename="技术考核题.txt"
  18. Content-Type: text/plain
  19. 技术考核
  20. 本次是个编程题,题目选Java/语言进行回答。
  21. 问题描述:
  22. 假设你的爱好是集邮。目前总共有N种不同的邮票,编号为从0到N-1.每种邮票的价钱被定义在数组int[] prices中(序号从0开始,数组的第i个元素表示第i种邮票的价格)。
  23. 你的目标是收集尽可能多种的邮票。你当前拥有的邮票存储在int[] have这个数组中。初始时,你没有钱,但是你可以卖掉已有邮票来买不同的邮票。返回你能收集到的不同种邮票的最大数量。
  24. 定义:
  25. class: PostmarksCollection
  26. method: numberOfDistinctPostmarks
  27. Parameters: int[], int[]
  28. Returns: int
  29. Method signature: public int numberOfDistinctPostmarks(int[] prices, int[] have)
  30. //为了进行测试,必须保证是public
  31. 约束:
  32. 1) N从1到50
  33. 2)prices中的元素数量刚好是N个元素
  34. 3)prices中的元素的值,从1到1,000,000
  35. 4)have中的元素数量是0个到N个
  36. 5)have中的每个元素是不同的
  37. 6)have中的每个元素的值是从0到N-1.
  38. 例如:
  39. 1)
  40. {13,10,14,20}
  41. {3,0,2,1}
  42. Returns: 4
  43. 你已经拥有所有种类的邮票。
  44. 2)
  45. {7,5,9,7}
  46. {}
  47. Returns: 0
  48. 你开始没有任何邮票,所以你也不能组任何事情。
  49. 3)
  50. {4,13,9,1,5}
  51. {1,3,2}
  52. Returns: 4
  53. 卖掉邮票2,买入邮票0和4,(邮票2的价钱是9,邮票0的价钱是4,邮票4的价钱是5,卖掉2刚好买入0和4)
  54. 4)
  55. {16,32,13,2,17,10,8,8,20,17}
  56. {7,0,4,1,6,8}
  57. Returns: 8
  58. --------------------------------------------------------------------------------
  59. 使用Java请在此处答题(请使用JDK5.0编译,编译不能通过者不计算分数)
  60. -----------------------------23757983230932--

总结:
  初学者要提高自己的编程水平,熟悉一下常用的协议是必须的。

Boost.Beast C++网络编程实战:从HTTP/WebSocket协议解析到高性能服务开发 在现代C++网络编程中,异步I/O模型和高性能协议处理是构建可扩展服务的关键。Boost.Asio库提供了强大的跨平台异步I/O能力,而基于其构建的Boost.Beast则专门处理HTTP/1.x和WebSocket协议解析与序列化。这项技术通过抽象化的消息容器、序列化器和解析器,将开发者从繁琐的协议细节中解放出来,使其能专注于业务逻辑。其价值在于结合了现代C++的优雅范式与工程实践的高效性,广泛应用于需要清晰、高效网络通信的中间件、实时应用和API客户端等场景。本文以Boost.Beast为例,深入探讨如 阅读详情

相关推荐

Unity安卓局域网文件传输方案:HTTP协议实现与优化指南

在游戏开发与移动应用开发中,局域网文件传输是一项基础且关键的技术,它基于客户端-服务器(C/S)架构模型,通过本地网络协议实现设备间高效数据交换。其核心原理是利用设备在同一网络下的IP可达性,构建点对点通信链路,避免了对外部互联网和云服务的依赖。这项技术的核心价值在于保障数据传输的私密性、提升传输速度与稳定性,尤其适用于开发测试、资源热更新、日志收集等对安全与效率要求高的内网场景。本文聚焦于Unity引擎与安卓平台的集成实践,深入探讨如何利用HTTP协议这一通用、易上手的方案,结合UnityWebReque

weixin_34331102的博客 661

安卓http源码查看器详解

1.效果图如下,输入网址就可以看到该网址的源码 2.项目工程文件如右图所示: 3.首先,布局文件如下,我采用的是线性布局 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools...

weixin_30609331的博客 158

C/C++ HTTP服务器开发:从请求解析到高并发epoll实现

网络编程是构建互联网服务的基石,其核心在于理解客户端与服务器之间通过协议进行通信的原理。HTTP协议作为Web通信的标准,定义了请求与响应的格式。在技术实现上,服务器需要高效处理并发连接,传统多进程/多线程模型面临资源开销大的挑战,而I/O多路复用技术(如epoll)通过事件驱动机制,用单个线程监控大量连接,显著提升了并发性能。这种高并发架构对于构建高性能Web服务具有重要价值,广泛应用于网关、API服务器等场景。本文以C/C++ HTTP服务器开发为例,深入探讨了从基础请求解析、响应构建到支持动态CGI程

weixin_30600197的博客 478

http查看工具

View HTTP Request and Response Header Web-Sniffer Desktop App Please check our new free Web-Sniffer desktop app for Windows and Mac: Download: Version 1.0.0 Beta Windows Mac OS X For more ...

weixin_30765475的博客 177

Http头信息查看器

在IE浏览器下捕获每次http请求发出的消息及响应返回的消息,调试程序非常方便。

【CVPR 2025】低光增强HVI论文精读与源码复现---part1 论文网络精读

【CVPR 2025】本文参考论文HVI: A New Color Space for Low-light Image Enhancement part1 在文章中对论文核心网络与原理展开详细解释 part2 对论文公开代码的arch网络与其他核心部分展开详细解释

BOB_BOB_BOB_的博客 3254

HTTP状态码 值得收藏

HTTP状态码 100 请求者应继续进行请求。服务器返回此代码以表示,服务器已收到某项请求的第一部分,正等待接收剩余部分。 101 请求者已要求服务器切换协议,服务器已确认并准备切换。 200 服务器已成功处理相应请求。通常,这表示服务器提供了请求的网页。如果您的 robots.txt 文件显示为此状态,则表示 Googlebot 已成功检索到该文件。 201 请求成功且服务器创建了新的资源。 ...

BigMoreKT的博客 402

永久关闭Windows更新的5种方法

很多家用电脑,如果系统自动更新的话,会变得越来越卡顿,且硬件型号兼容也并不完美。那么我们该如何彻底关闭Win11的自动更新呢?以下准备了5种方法,您可以根据自身实际情况选择合适的方法!

qq_43652793的博客 1万+

一个查看Http数据工具

tcpTrace(www.pocketsoap.com/tcptrace)是一个查看消息交换过程的优秀工具,它通过设置一个客户端和服务器端之间的隧道工作。启动tcpTrace时,它会要求输入目标URL和端口号,以及tcpTrace监听的本地端口号。这样,你就可以通过设置代理stub的URL属性,把stub指向这个本地端口(例如localhost:8080)。tcpTrace能够记录所有的请求和应答

流星之光的专栏 890

保姆级教程:在RK3568上搞定PR2100K+GC2385双摄(从DTS配置到HAL层补丁)

本文详细介绍了在RK3568平台上调试PR2100K+GC2385双摄系统的完整流程,从DTS配置到HAL层补丁。涵盖硬件连接、媒体控制器拓扑验证、Camera3配置、HAL层特殊补丁及性能优化等关键步骤,帮助开发者快速解决双摄调试中的常见问题,提升嵌入式视觉系统开发效率。

weixin_28724661的博客 195

YOLOV8多模态(可见光+红外光目标检测任务,基于Ultralytics官方代码实现)

torch 2.3.1 torchvision 0.18.1 Python 3.8.19 tensorrt 8.5.3.1DroneVehicle数据集下载地址DroneVehicle 数据集由无人机采集的 56,878 张图像组成,其中一半是 RGB 图像,其余是红外图像。我们为这 5 个类别制作了丰富的注释,其中包含定向边界框。其中,汽车在 RGB 图像中有 389,779 个注释,在

Mjy的博客 7583

Python HTTP服务器底层实现:从Socket到GET/POST请求处理

HTTP协议是Web通信的基石,它定义了客户端与服务器之间请求与响应的标准格式。其工作原理基于TCP连接,通过请求行、头部和正文构成报文,实现资源的获取与提交。理解HTTP底层机制对于Web开发、性能优化和网络编程至关重要,能帮助开发者深入掌握框架原理并处理定制化场景。本文聚焦于使用Python标准库手动实现HTTP服务器,核心内容包括通过socket监听处理网络连接、解析HTTP/1.1协议规范,并重点实现GET与POST请求的完整处理流程。通过实践请求解析、路由分发、响应构建及表单数据处理等关键环节,读

weixin_30571465的博客 493

Cadence Virtuoso VIVA波形分析:从背景色修改到线宽调整的完整指南

本文详细介绍了Cadence Virtuoso VIVA波形分析工具的核心使用技巧,包括背景色修改、线宽调整等高级功能。通过具体操作步骤和配置方法,帮助工程师优化波形显示效果,提升工作效率。特别强调了与Calculator组件的配合使用,以及专业波形图的输出技巧。

weixin_27330481的博客 620

一个简单的Socket实现的HTTP响应服务器(GET/POST/UPLOAD)

查看复制到剪切板打印 package test.io;       import java.net.*;    import java.io.*;       /**    * 一个简单的Socket实现的HTTP响应服务器。&lt;br&gt;    * 只用于熟悉HTTP协议的目的,可以看到浏览器发过来的数据格式。    *     * @author 赵学庆 www.java2000...

开心的穷下去 316

10分钟学会工程领域Hypermesh与Abaqus联立处理大量铆钉连接简化做法

铆钉连接是一种可靠且高强度的机械连接方式,广泛应用于多个领域。但是,工程结构上铆钉连接往往以较大的数量出现,若按照常规的一个个去选择生成,处理1个铆钉连接点需要1分钟来算,300个铆钉需要5个小时,耗费大量的时间成本。给出了一种高效处理铆钉连接的方法,提升效率50倍以上。

qq_34933927的博客 1612

高精度导航 | RTK:2025年高精度导航算法综述,包括:原理,数据,公式,完整代码,开源代码链接

中国科学院国家授时中心的最新研究表明,PPP-AR/PPP-RTK增强算法使时间传递链路的稳定性提升超过30%,模糊度固定成功率高达93.57%,首次固定时间缩短至20分钟内。当这一愿景实现,人类社会的生产效率和资源利用率将迎来革命性提升,高精度定位将成为像电力、互联网一样的基础服务,深刻重塑我们的生活方式和文明形态。PPP-RTK作为GNSS定位领域的最前沿技术,成功融合了精密单点定位(PPP)和实时动态定位(RTK)的双重优势。,实现在无GNSS信号环境下(如隧道、地下停车场)的连续厘米级定位。

尘世冰封的专栏 1604

java 服务器 post响应_一个简单的Socket实现的HTTP响应服务器(GET/POST/UPLOAD)

引用:POST /?username=111&password=222 HTTP/1.1Host: 127.0.0.1:8000User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.2; zh-CN; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1Accept: text/html,application/...

weixin_29251337的博客 409

华为非AI方向0603笔试真题-爆破小游戏(详细思路+多语言题解)

华为非AI方向0603笔试第二题【爆破小游戏】,提供详细思路讲解以及代码实现。

qq_45776114的博客 358

php上传文件post,php利用fsockopen GET/POST提交表单及上传文件

php利用fsockopen GET/POST提交表单及上传文件,具体内容如下1.GETget.php$host = 'demo.fdipzone.com';$port = 80;$errno = '';$errstr = '';$timeout = 30;$url = '/socket/getapi.php';$param = array('name' => 'fdipzone','gen...

weixin_39587822的博客 148

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

java httpserver的类_JAVA实现HTTPserver端

用java socket实现了一个简单的httpserver, 能够处理GET, POST,以及带一个附件的multipart类型的POST。尽管中途遇到了非常多问题, 只是通过在论坛和几个高手交流了一下,问题都攻克了。假设你认为程序有些地方看不明确,能够參看这个帖子:http://topic.youkuaiyun.com/u/20090625/22/59a5bfc8-a6b6-445d-9829-ea6d4...

weixin_30074329的博客 914

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

c java http server_JAVA实现HTTPserver端

用java socket实现了一个简单的httpserver, 能够处理GET, POST,以及带一个附件的multipart类型的POST。尽管中途遇到了非常多问题, 只是通过在论坛和几个高手交流了一下,问题都攻克了。假设你认为程序有些地方看不明确,能够參看这个帖子:http://topic.youkuaiyun.com/u/20090625/22/59a5bfc8-a6b6-445d-9829-ea6d4...

weixin_39724287的博客 100

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

SwiftHTTP核心功能详解:GET、POST、上传下载全掌握

SwiftHTTP是一款轻量级的Swift网络库,作为NSURLSession的精简封装,它极大简化了HTTP请求的处理流程。无论是基础的GET/POST请求,还是复杂的文件上传下载操作,都能通过简洁的API快速实现,是iOS开发中处理网络请求的得力工具。 ## 一、极速上手:SwiftHTTP的核心优势 SwiftHTTP的设计理念是"简洁至上",通过封装NSURLSession的复杂细节,

gitblog_00716的博客 519
上一篇: 惊现一个奇怪的域名 java.cn.com
下一篇: 最大子序列算法的JAVA实现
老紫竹
博客等级 码龄19年 1万+粉丝 1252原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值