20150108--HTTP协议+PHP模拟HTTP请求-02

HTTP协议

1. 什么是http协议?

协议:协议是一种双方约定好的规范,双方在做某一件事情的事情,必须按照事先定义好的规范去实现和操作。

HTTP:超文本传输协议,HyperText Transport Protocol,超文本在服务器与浏览器之间传输的时候必须遵循的协议。

2. 什么是html?

超文本标记语言:HyperText Markup Language

html的作用:保证同一数据在不同的电脑(用户),看到的效果一样。

HTTP协议工作原理

HTTP协议特点

支持客户/服务器模式:HTTP协议是为b/s而生,是基于web产生,http协议不仅限于b/s,凡是能够发出http请求的东西,都可以使用http协议访问服务器。telnet客户端

简单快速[只需请求方法和路径]:用户通过浏览器发起请求的时候:输入url即可

灵活[任意数据]:可以传输任意数据类型,不管是字符流还是二进制流

无连接[每次连接只处理一个请求]:当浏览器发起一次请求之后,服务器只能对当前请求产生一次响应,响应完就会关闭连接。

无状态[事务处理没有记忆能力]:同一个浏览器连续多次向服务器发起请求,服务器都不认识

HTTP协议内容

HTTP协议根据参与者的参与方式分为两种:HTTP请求(Request)和HTTP响应(Response)

HTTP请求

HTTP请求分为4个部分:请求行,请求头,空行,请求数据,四个部分都是独立占行(\r\n)

请求行:请求方式 请求文件路径(URI) 协议版本

请求方式:GET/POST

请求文件的URI:域名后面的部分。/gz/index.php

协议版本:HTTP/1.1

请求头:请求头是具体的协议的集合,每个单独的协议占一行,每一行分为两个部分:协议名:协议的内容

常见的请求头

host:主机名(域名),必要的

accept-encoding:允许服务器传送什么类型的数据,gzip

referer:引用,当前的请求是在上一次什么请求之后再次发起的

connection:连接状态,在请求结束之后,连接应该如何处理keep-alive

accept-language:能够接收的语言,cn,en

cookie:携带的保存在浏览器端的数据

user-agent:当前浏览器的内核信息

accept:可以接收的数据,text,image…

content-length(post):当前浏览器提交的数据的长度,

if-modified-since(get):当前浏览器本地有缓存,询问服务器被请求的脚本有没有更新

content-type(post):数据类型

空行:用于结束请求头(请求头不固定数量)

请求数据:POST请求的时候会有请求数据

完整HTTP请求

httpwatch可以用来抓包:抓取http请求和响应,httpwatch兼容性不好

telnet模拟http请求

在windows下面,提供了一个客户端telnet,能够远程访问电脑

1. 开启telnet客户端

a) 打开控制面板

b) 选择“程序和功能”

c) 点击左侧“打开或者关闭windows功能”

d) 勾选“telnet客户端”,点击确定即可

2. 打开cmd控制台

3. 输入telnet命令,连接电脑:telnet 主机地址 端口(telnet localhost 80)

4. 数据回显:按住Ctrl+右中括号

5. 出现对应的字符之后,再按回车

6. 开始模拟HTTP情趣:删除是可以的,但是不会清空显示

a) 请求行:GET /20150108/demo01_http.php HTTP/1.1

b) 请求头:HOST

c) 空行:直接回车

注意:telnet连接服务器的时候,一定要下手快

建议:先在文件中写好,然后赋值粘贴

HTTP响应

服务器返回数据给浏览器的时候所遵循的规则。

HTTP响应包含四个部分:状态行,响应头,空行,响应体(消息体)

状态行:协议版本 状态码 状态描述(HTTP/1.1 200 ok)

响应头:与请求头一致

常见的响应头如下:

server:服务器信息

date:响应的日期时间

last-modified:当前请求的文件的最后修改时间,与请求头中的if-modified-since

content-length:数据长度(字节)

content-type:数据类型,text/html,image/png

location:重定向,告诉浏览器,重新发起请求

refresh:刷新,指定时间后的重定向

content-encodeing:对应请求中的accept-encodeing

cache-control:缓存控制,告诉浏览器要不要对当前请求的数据进行缓存no-cached/cached

空行:用于结束响应头,用于区分响应头和数据(响应体)

响应体:html代码

修改http响应

php可以修改http响应,但是通过header来实现。

1. 设置显示编码

2. 跳转:Location

3. 刷新:refresh

4. 图片输出:浏览器默认服务器给出的数据都是text/html

5. 文件下载:修改数据传输流,修改浏览器接收数据的方式。

PHP模拟http请求

GET请求模拟

1. PHP尝试连接上服务器

fsockopen:打开服务器,建立连接,得到的是一个连接资源

2. 发起HTTP请求:四个部分(GET只有三个部分)

GET请求:请求行,请求头和空行

发出请求

fwrite:向一个连接资源中写入对应的数据,返回写入的数据的长度

数据在发出请求的那一刻,服务器已经响应好,并将数据返回了,数据保存在资源中。

3. 接收数据/输出数据

从资源中取出数据

循环遍历整个资源

4. 关闭连接

POST请求

POST请求方式基本差多,只是必须要多几个请求头:content-type,content-length,请求数据

时间: 2024-10-21 00:52:23

20150108--HTTP协议+PHP模拟HTTP请求-02的相关文章

20150108--HTTP协议+PHP模拟HTTP请求-01

回顾 数据备份:文件部分,数据表备份,SQL备份和增量备份(备份日志) 事务安全:默认自动提交,手动事务 变量:系统变量和自定义变量,作用域 触发器:自动触发,临时修改语句结束符(delimiter) 用户管理:创建用户,分配权限(grant),回收权限(revoke),删除用户 root用户密码找回 函数 1. 什么是函数? 一段可以被重复使用的代码,是为了针对性的解决某一个特定的问题. 2. 函数分类:系统函数和自定义函数 系统函数 系统已经定义好,直接调用即可. 函数的调用:函数都有返回值

PHP+SOCKET 模拟HTTP请求

HTTP消息结构 客户端请求包括四部份:请求行(状态行).请求头.空行.请求主体(数据),如下图: 服务端响应包括四部份:响应行(状态行).响应头.空行.响应主体(数据),如图: HTTP请求方法: POST .GET  .HEADE.  PUT.  TRACE  .DELETE .OPTIONS .CONNECT  (前三种最实用),有这麽多的请求方法,但web服务器不一定所有的都支持. GET   基本一致,请求指定的页面信息,并返回实体主体. HEAD  基本和GET一致 ,只不过返回的响

轻松把玩HttpAsyncClient之模拟post请求示例

如果看到过我前些天写过的<轻松把玩HttpClient之模拟post请求示例>这篇文章,你再看本文就是小菜一碟了,如果你顺便懂一些NIO,基本上是毫无压力了.因为HttpAsyncClient相对于HttpClient,就多了一个NIO,这也是为什么支持异步的原因. 不过我有一个疑问,虽说NIO是同步非阻塞IO,但是HttpAsyncClient提供了回调的机制,这点儿跟netty很像,所以可以模拟类似于AIO的效果.但是官网上的例子却基本上都是使用Future<HttpResponse

C# 通过模拟http请求来调用soap、wsdl

C#调用webservice的方法很多,我说的这种通过http请求模拟来调用的方式是为了解决C#调用java的远程API出现各种不兼容问题. 由于远程API不在我们的控制下,我们只能修改本地的调用代码来适应远程API. 在以上情况下,我们就通过模拟http请求来去调用webservice. 首先,我们要分析调用端口时,我们发送出去的数据. 先抓个包看看,这里,我们没有办法用Fiddler来监听SOAP协议的内容,但是SOAP还是基于http协议的. 用更底层的工具是能够抓到的.这里可以去百度一下

使用socket模拟Http请求

这里举一个简单的例子,使用socket来模拟一段http访问百度代码 封装的工具类如下,方法叫XHttp() package com.spider.net; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.Socke

利用telnet模拟http请求

最近准备接触php socket编程,所以准备先巩固以前学到的知识, 这里先简单回顾下 利用telnet 来模拟http请求. 1.先在80端口指向的目录建立http.php 文件 2.在终端输入 telenet 127.0.0.1 80   ps: windows doc命令行下:ctrl键 + ']' 键 进入输入模式,接着按回车切换到显式输入模式(可以显示输入的字符) 模拟GET请求  #在刚才建立的http.php 文件里打印 get请求参数 print_($_GET); #请求方式  

linux系统里模拟并发请求siege

siege压力测试,siege会将接口进行模拟并发,返回每秒的并发数! 一.siege的安装下载:wget 一.siege的安装下载:wget http://download.joedog.org/siege/siege-latest.tar.gz http://www.joedog.org/pub/siege/siege-latest.tar.gz解压: tar -zxvf siege-latest.tar.gzcd siege-..*./configure --prefix=/usr/loc

教你如何用Python模拟http请求(GET,POST)

模拟http请求有什么用呢? 我们现在使用的所有需要使用网络的:软件 应用 app 网站里面的绝大部分功能都是通过http协议来工作的 什么是http协议? http协议,超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议. 需要详细了解http请自行搜索,本文简单说一下http的请求过程 由客户端发送请求,请求为一段文字(请求报文),服务端得到请求中参数,由后端进行处理,然后执行相应的功能, 由服务端返回一段文字(响应报文,也

【报文】理解HTTP协议的Request/Response(请求响应)模型

[报文]理解HTTP协议的Request/Response(请求响应)模型 系列目录 [简介]"请求/响应"模型 http://www.cnblogs.com/engraver-lxw/p/7550514.html [原理]理解HTTP协议的Request/Response(请求响应)模型 http://www.cnblogs.com/engraver-lxw/p/7550691.html [报文]理解HTTP协议的Request/Response(请求响应)模型--当前 http:/