文档章节

http协议之post请求(socket请求web内容)

pseudo
 pseudo
发布于 2013/05/06 23:07
字数 405
阅读 890
收藏 15
点赞 0
评论 0

http请求与响应的协议格式在前一篇文章中已经介绍过了,并对get请求进行了模拟测试,下面就对post请求进行测试。

1.首先搭建测试环境:

新建个web项目posttest,编写一个servlet与html页面来进行post访问:

LoginServlet:

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(name="login",urlPatterns={"/login"})
public class LoginServlet extends HttpServlet {

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		resp.setContentType("text/html");
		PrintWriter out = resp.getWriter();
		
		String name=req.getParameter("name");
		String pwd = req.getParameter("pwd");
		
		if(name.equals("hello")&&pwd.equals("world")) {
			out.print("welcome," + name);
		} else {
			out.print("sorry, access denied");
		}
		out.flush();
	}
}

login.html:



<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="login" method="post">
name :
<input type="text" name="name" /> <br/>
password:
<input type="password" name="pwd" /> <br/>
<input type="submit" value="submit"/>
</form>
</body>
</html>

运行项目,截包:


返回数据包:

2.编程模拟:


public class PostDate {

	public static void main(String[] args) throws UnknownHostException, IOException {
		Socket socket = new Socket("127.0.0.1",8080);
		
		String requestLine="POST /posttest/login HTTP/1.1\r\n";
        String host="Host: localhost:8080\r\n";
        String contentType="Content-Type: application/x-www-form-urlencoded\r\n";
        String body = "name=hello&pwd=world";
//        String contentLength="Content-Length: "+body.length()+"\r\n";
        
        OutputStream os = socket.getOutputStream();
        os.write(requestLine.getBytes());
        os.write(host.getBytes());
        os.write(contentType.getBytes());
//        os.write(contentLength.getBytes());
        os.write("\r\n".getBytes());
        os.write(body.getBytes());
        os.flush();
       
        BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        String tmp = null;
        while((tmp=reader.readLine())!=null) {
            System.out.println(tmp);
        }
        socket.close();
	}
}

注意,如果直接运行将不能完成请求,并导致服务器出现异常,返回500状态码(内部程序错误),发送的数据包如下 :


这是因为请求数据不完整造成的。若要使程序运行,需加上Content-Length请求头(上面程序中被注释掉的内容)。


© 著作权归作者所有

共有 人打赏支持
pseudo

pseudo

粉丝 74
博文 37
码字总数 35469
作品 3
朝阳
程序员
[转]通俗易懂客户端与服务器端交互原理(HTTP数据请求与HTTP响应,包括Servlet部分)

经常看到HTTP客户端与服务器端交互原理的各种版本的文章,但是专业术语太多,且流程过于复杂,不容易消化。于是就按照在 Servlet里面的内容大致做了一些穿插。本来 连 Tomcat 容器 和 Servle...

inferrrrrr ⋅ 2010/05/11 ⋅ 1

初识web框架

一、HTTP协议 1.简介: HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。 HTTP是一个基于...

迟到的栋子 ⋅ 2017/11/04 ⋅ 0

TCP和Http的区别!我都搞懂了,你就别迷糊了!

相信不少初学手机联网开发的朋友都想知道Http与Socket连接究竟有什么区别,希望通过自己的浅显理解能对初学者有所帮助。 1、TCP连接 手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可...

yzbty23 ⋅ 2015/12/22 ⋅ 2

Note of How Tomcat Works (1)

1、Servlet容器是如何工作的 一个servlet容器要为一个servlet的请求提供服务,基本上有三件事要做: (a)创建一个request对象并填充那些有可能被所引用的servlet使用的信息,如参数、头部、coo...

ayesd ⋅ 2013/02/01 ⋅ 0

python用httplib模块和发送get和post请求

httplib是一个相对底层的http请求模块,其上有专门的包装模块,如urllib内建模块,goto等第三方模块,但是封装的越高就越不灵活,比如urllib模块里请求错误时就不会返回结果页的内容,只有头...

天道酬勤VIP ⋅ 2017/08/26 ⋅ 0

Golang Web学习(13)—— 搭建简单的Web服务器

本文为转载,原文:Golang Web学习(13)—— 搭建简单的Web服务器 Golang 1、Web工作方式 我们平时浏览网页的时候,会打开浏览器,输入网址后按下回车键,然后就会显示出你想要 浏览的内容。...

ChainZhang ⋅ 01/14 ⋅ 0

http协议之get请求原理(socket请求web内容)

http是处于tcp/ip四层网络模型的应用层(最上层),如下图 因为它是建立在tcp协议之上的,所以它的底层实现是socket.(笔者猜测HttpUrlConnection与开源工具httpClient都是建立在socket之上的...

pseudo ⋅ 2013/05/05 ⋅ 0

HTTP in iOS你看我就够

HTTP属于老话题了,在项目中我们经常需要往服务端发POST或者GET请求,但是对于HTTP的了解不应只局限于此。千里之行,始于足下。越想走的远,基本原理就应该了解的透彻全面一些,仅仅停留在使...

北方人在上海 ⋅ 2016/05/17 ⋅ 0

Python3学习笔记13-网络-Python服务器的发展历程

本节我们来学习Python的服务器,在学习之前,我们先来研究下python 服务器的发展历程,即Python的原始和进化服务器。 一、原始Python服务器 有人表示,只学Python没有用,必须学会一个框架(...

Corwien ⋅ 2016/06/11 ⋅ 0

网络协议(http/tcp/ip/socket)请求与服务

GET跟POST的区别: get只能传送128K的数据 get方式应用来查询信息,根据http协议,get方式查询时,提交的查询内容显示在浏览器地址栏中,并且get方式提交的网址不超过256字节数。 而post是无...

青云_K ⋅ 2012/11/30 ⋅ 1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

个人博客的运营模式能否学习TMALL天猫质量为上?

心情随笔|个人博客的运营模式能否学习TMALL天猫质量为上? 中国的互联网已经发展了很多年了,记得在十年前,个人博客十分流行,大量的人都在写博客,而且质量还不错,很多高质量的文章都是在...

原创小博客 ⋅ 今天 ⋅ 0

JavaScript零基础入门——(十一)JavaScript的DOM操作

JavaScript零基础入门——(十一)JavaScript的DOM操作 大家好,欢迎回到我们的JavaScript零基础入门。最近有些同学问我说,我讲的的比书上的精简不少。其实呢,我主要讲的是我在开发中经常会...

JandenMa ⋅ 今天 ⋅ 0

volatile和synchronized的区别

volatile和synchronized的区别 在讲这个之前需要先了解下JMM(Java memory Model :java内存模型):并发过程中如何处理可见性、原子性、有序性的问题--建立JMM模型 详情请看:https://baike.b...

MarinJ_Shao ⋅ 今天 ⋅ 0

深入分析Kubernetes Critical Pod(一)

Author: xidianwangtao@gmail.com 摘要:大家在部署Kubernetes集群AddOn组件的时候,经常会看到Annotation scheduler.alpha.kubernetes.io/critical-pod"="",以表示这是一个关键服务,那你知...

WaltonWang ⋅ 今天 ⋅ 0

原子性 - synchronized关键词

原子性概念 原子性提供了程序的互斥操作,同一时刻只能有一个线程能对某块代码进行操作。 原子性的实现方式 在jdk中,原子性的实现方式主要分为: synchronized:关键词,它依赖于JVM,保证了同...

dotleo ⋅ 今天 ⋅ 0

【2018.06.22学习笔记】【linux高级知识 14.4-15.3】

14.4 exportfs命令 14.5 NFS客户端问题 15.1 FTP介绍 15.2/15.3 使用vsftpd搭建ftp

lgsxp ⋅ 今天 ⋅ 0

JeeSite 4.0 功能权限管理基础(Shiro)

Shiro是Apache的一个开源框架,是一个权限管理的框架,实现用户认证、用户授权等。 只要有用户参与一般都要有权限管理,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户...

ThinkGem ⋅ 昨天 ⋅ 0

python f-string 字符串格式化

主要内容 从Python 3.6开始,f-string是格式化字符串的一种很好的新方法。与其他格式化方式相比,它们不仅更易读,更简洁,不易出错,而且速度更快! 在本文的最后,您将了解如何以及为什么今...

阿豪boy ⋅ 昨天 ⋅ 0

Python实现自动登录站点

如果我们想要实现自动登录,那么我们就需要能够驱动浏览器(比如谷歌浏览器)来实现操作,ChromeDriver 刚好能够帮助我们这一点(非谷歌浏览器的驱动有所不同)。 一、确认软件版本 首先我们...

blackfoxya ⋅ 昨天 ⋅ 0

线性回归原理和实现基本认识

一:介绍 定义:线性回归在假设特证满足线性关系,根据给定的训练数据训练一个模型,并用此模型进行预测。为了了解这个定义,我们先举个简单的例子;我们假设一个线性方程 Y=2x+1, x变量为商...

wangxuwei ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部