zoukankan      html  css  js  c++  java
  • PHP模拟发送POST请求之一、HTTP协议头部解析

      WEB开发中信息基本全是在POST与GET请求与响应中进行,GET因其基于URL的直观,易被我们了解,可POST请求因其信息的隐蔽,在安全的同时,也给开发者们模拟发送带来了麻烦。接下来的几篇博文中,我将结合自己的笔记和理解,详细解释PHP进行POST请求的几种方法,如有错误,烦请指正。

      HTTP协议信息是WEB开发中的一项重要内容,了解它可以帮助我们更深刻地理解BS交互,也有利于我们从更底层理解WEB开发。HTTP协议是一种简单灵活方便的通讯协议,并且要记住,它是一种无状态的协议,即它是一种无记忆的协议,每一次的交互都是单独的。

      我们可以用浏览器的开发工具(IE的F12  火狐的FireBug等)的“网络”面板来查看HTTP头信息。

      一般地HTTP头信息分为三类:请求信息,响应信息和交互信息(个人认为也是请求信息的一种)。

    1,请求信息:

      在访问一个网站时会由客户端发出请求信息,此信息不带有数据,只是单纯地向服务器接触,促使服务器返回响应信息。

      其格式为两部分:请求行和消息报头。

    A.请求行: method(请求方法)  path(请求站内地址)   HTTP/version(协议/版本信息)

      常见的请求方法有GET/POST/HEAD/OPTION等

    B.消息报头:

      Host(必须):主机和端口号,端口号默认为80

      Accept:期望接收内容类型(image/gif  text/html   */*)

      Accept-Encoding:期望接收的压缩类型(gzip deflat)

      Accept-Charset:期望接收的字符集(utf-8)

      Accept-Language(zh-CN)

      Cookie:用户的Cookie信息

      Connection:连接控制

      User-Agent:客户端信息

      ... ...

    以下是一个典型的请求头信息:

    GET  index.php  HTTP/1.1
    
    Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
    Accept-Encoding:gzip, deflate, sdch
    Accept-Language:zh-CN,zh;q=0.8
    Cache-Control:max-age=0
    Connection:keep-alive
    Cookie:SOHUHOMETAB=visit:2; IPLOC=CN1407; SUV=1510312046259910
    Host:www.sohu.com
    If-Modified-Since:Sat, 31 Oct 2015 12:45:22 GMT
    Upgrade-Insecure-Requests:1
    User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.99 Safari/537.36 

    2,响应信息 

      服务器返回数据

      响应信息分为三部分:状态行 消息报头 响应正文

    A.状态行:HTTP/version(协议/版本信息)  状态码   状态文本(对状态码的文本描述)

      状态码共有5类:

        1XX:表示临时响应,需要请求者继续操作

        2XX:表示响应成功,服务器成功地响应了请求

        3XX:表示重定向,需要请求者进一步操作

        4XX:表示客户端错误,服务器无法正常响应

        5XX:表示服务器端错误,服务器无法正常响应

    具体信息可参考:HTTP状态码详解

    B.消息报头:

      Server:服务器信息

      Content-Encoding:数据压缩格式

      Content-Length:数据长度

      Content-Type:数据类型

      Cache-Control:缓存控制

      Connection:连接控制

      Date:日期信息

      Expires:返回数据的过期信息

      Last-Modified:返回最后的修改时间

      Set-Cookie:设置客户端的Cookie信息

      ... ...

    C.响应正文 

      即返回的页面数据,在页面以HTML文档形式表现出来。

    以下是常见的响应消息

    HTTP/1.1  200  OK
    
    Cache-Control:no-cache
    Connection:close
    Content-Encoding:gzip
    Content-Length:6947
    Content-Type:text/html; charset=GBK
    Date:Sat, 31 Oct 2015 13:30:11 GMT
    Expires:-1
    Pragma:no-cache
    Proxy-Connection:keep-alive
    Server:nginx/1.2.5
    Set-Cookie:JSESSIONID=yiuug4yejhc1cdbzydoxlcpn;Path=/

    3,交互信息

      是包含了请求数据的请求信息 常见于用户上传文件 注册等

      其分为三部分:请求行 消息报头 请求正文

    A.与请求信息的请求行相同

    B.在请求报头的基础上添加了有关请求正文的数据

      Content-Type:上传信息的内容类型

      Content-Length:上传信息的长度

      ... ...

    C.请求正文:

      即请求的具体数据串(name=xxx&passwork=xxx),当然为了安全起见,有时会对POST信息加密编码。

    以下是典型的请求消息:

    GET  login.php  HTTP/1.1
    
    Host:passport.sohu.com
    Accept:text/html,application/xhtml+xml,application/xml
    Accept-Encoding:gzip, deflate
    Accept-Language:zh-CN,zh;q=0.8
    Cache-Control:max-age=0
    Connection:keep-alive
    Content-Length:166
    Content-Type:application/x-www-form-urlencoded
    Referer:http://mail.sohu.com/
    User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.99 Safari/537.36
    
    Form Data
    domain=sohu.com&callback=passport20008375022711697966_cb1446298206568&appid=1113&userid=FDFFDF%40sohu.com&password=a3f4384c2bc44fa909ffd0ecc5fa8eb9&persistentcookie=0

     明白了浏览器都往服务器上发送了些什么,那用其他方法伪装成一个服务器也就不是难事了。

    下一节我会介绍PHP和JS处理最基本URL的方式,解决GET请求部分的同时,也将模拟发送POST请求的准备做足。

    如果您觉得本博文对您有帮助,您可以推荐或点赞,如果您有什么问题,也可以在下方留言,一块讨论,谢谢。

  • 相关阅读:
    Mybatis入门之常规操作CURD案例Demo(附源码)
    如何捕获Wince下form程序的全局异常
    如何捕获winform程序全局异常?(续)
    log4net学习目录
    如何捕获winform程序全局异常?
    有关学习的思考
    使用VS2012主题插件创建自己的主题
    Vistual Studio 2012更换皮肤
    log4net使用经验总结
    log4net使用流程
  • 原文地址:https://www.cnblogs.com/zhenbianshu/p/4929767.html
Copyright © 2011-2022 走看看