HTTP方法(也经常被叫做 “谓词”)告知服务器,客户端想对请求的页面做些什么。下面的都是非常常见的方法:
- GET
- 浏览器告知服务器:只获取页面上的信息并发给我。这是最常用的方法。
- HEAD
- 浏览器告诉服务器:欲获取信息,但是只关心消息头 。应用应像处理 GET 请求一样来处理它,但是不分发实际内容。
- POST
- 浏览器告诉服务器:想在 URL 上发布新信息。并且,服务器必须确保数据已存储且仅存储一次。这是 HTML 表单通常发送数据到服务器的方法。
- PUT
- 类似 POST 但是服务器可能触发了存储过程多次,多次覆盖掉旧值。你可能会问这有什么用,当然这是有原因的。考虑到传输中连接可能会丢失,在 这种 情况下浏览器和服务器之间的系统可能安全地第二次接收请求,而不破坏其它东西。因为 POST 它只触发一次,所以用 POST 是不可能的。
- DELETE
- 删除给定位置的信息。
- OPTIONS
- 给客户端提供一个敏捷的途径来弄清这个 URL 支持哪些 HTTP 方法。
除了 HOST 为必须,其他都是可选的。下面写几个常用的:
- HOST – 当一个 Web Server 部署了多个域名时,就靠它了
- UA(User-Agent)– 一篇有趣的故事:浏览器野史 UserAgent 列传 上 & 浏览器野史 UserAgent 列传 下
- Cookies – 为了辨别用户身份而储存在用户本地终端上的数据 - 模拟登录用到的东西 -
- Referer – 表示从哪儿链接到目前的网页,采用的格式是 URL
- Accept-Encoding – 能够接受的编码方式列表
延伸一下
Accept-Encoding
,我也是捣鼓过的人 =_=。它通常默认为 gzip, deflate
,gzip
是一种压缩格式,服务器使用压缩后可以用同样大小的数据传输更多的信息。但是 Python 中 urllib
可不支持 gzip 压缩哦。Nginx 中相关配置如下:1 2 3 4 5 6 | gzip on; gzip_min_length 1024; gzip_buffers 40 4k; gzip_comp_level 2; gzip_disable msie6; gzip_types application/atom+xml application/javascript application/json application/rss+xml application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/svg+xml image/x-icon text/css text/plain text/x-component; |
逃之~
在爬虫中,提交表单通常意味着模拟登录。提交的表单数据是以键值对形式组合的,并按照某种编码方式组合起来,存储在 HTTP 的请求正文中。
表单的数据格式与 url 中的 query 很相似。不同的是表单数据是存储于请求正文中,而 query 数据在 消息报头中(确切的说是因为使用了 POST 方法,而不是 GET 方法)。请求正文中的数据大小没有限制,而 query 则相反。
这是一个表单:
1 2 3 4 5 6 7 8 9 10 11 12 13 | <form action="" method="post" class="form" role="form"> <input type='hidden' name='csrfmiddlewaretoken' value='5cWBAVpqzJVxM74Wk4yWlWh0u0Dpz1JF' /> <div class="form-group"> <label for="id_username">昵称:</label> <input class="form-control" id="id_username" maxlength="40" name="username" size="40" type="text" /> </div> <div class="form-group"> <label for="id_password">密码:</label> <input class="form-control" id="id_password" maxlength="40" name="password" size="40" type="password" /> </div> <button id='id_submit' type="submit" class="btn btn-default">登录</button> <button id='id_register' type='button' class="btn btn-default" onclick='javascrtpt:window.location.href="/accounts/register"'>注册</button> </form> |
发送的表单数据是这样的:
1 2 3 4 5 6 7 | # 输入的用户名是 21,密码是 1212 csrfmiddlewaretoken=5cWBAVpqzJVxM74Wk4yWlWh0u0Dpz1JF&username=21&password=1212 # 为了便于观察,写成键值对形式 csrfmiddlewaretoken:5cWBAVpqzJVxM74Wk4yWlWh0u0Dpz1JF username:21 password:1212 |
csrf 是用来防御跨站域请求攻击的。form 中的数据是以
name=value
形式组合后存储在请求正文中发送的。
是对 Status-Code(响应状态代码)与 Reason-Phrase(状态代码的文本描述)的记录。
状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:
- 1xx:指示信息–表示请求已接收,继续处理
- 2xx:成功–表示请求已被成功接收、理解、接受
- 3xx:重定向–要完成请求必须进行更进一步的操作
- 4xx:客户端错误–请求有语法错误或请求无法实现
- 5xx:服务器端错误–服务器未能实现合法的请求
常见状态代码、状态描述与说明:
- 200 OK
- 请求已成功,请求所希望的响应头或数据体将随此响应返回
- 301 Moved Permanently
- 永久重定向
- 302 Found
- 临时重定向
- 400 Bad Request
- 客户端请求有语法错误,不能被服务器所理解
- 401 Unauthorized
- 请求未经授权
- 403 Forbidden
- 服务器收到请求,但是拒绝提供服务
- 404 Not Found
- 请求资源不存在
- 500 Internal Server Error
- 服务器发生不可预期的错误
- 503 Server Unavailable
- 由于临时的服务器维护或者过载,服务器当前无法处理请求。这个状况是临时的,并且将在一段时间以后恢复
没啥好总结的唉,HTTP 知识浅薄,错了的话就提出吧,感谢!
No comments:
Post a Comment