美文网首页
Flask学习笔记之HTTP(一)

Flask学习笔记之HTTP(一)

作者: 容澄 | 来源:发表于2016-06-19 13:18 被阅读0次

先整理一下HTTP基础知识:

HTTP 方法:GET 对比 POST

HTTP 的工作方式是客户机与服务器之间的请求-应答协议。web 浏览器可能是客户端,而计算机上的网络应用程序也可能作为服务器端。

举例:客户端(浏览器)向服务器提交 HTTP 请求;服务器向客户端返回响应。响应包含关于请求的状态信息以及可能被请求的内容。

在客户机和服务器之间进行请求-响应时,两种最常被用到的方法是:GET 和 POST:
GET - 从指定的资源请求数据。
POST - 向指定的资源提交要被处理的数据。

一般来说,GET被认为是安全的,该操作用于获取信息而非修改信息,类似数据库查询,不会修改数据,不会影响资源的状态;而POST可以改变资源状态。


浅谈HTTP中Get与Post的区别

GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,参数之间以&相连,如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0%E5%A5%BD。

  • 如果数据是英文字母/数字,原样发送,
  • 如果是空格,转换为+,
  • 如果是中文/其他字符,则直接把字符串用BASE64加密,得出如:%E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII。

注:Python 3中encode参数的函数: parse.urlencode()

Python中以GET方式抓取数据:

from urllib import request, parse 

# Base URL being accessed
url = 'http://httpbin.org/get'

# Dictionary of query parameters (if any)
parms = {
       'name' : 'wang',
       'age' : '/'
}
    
# Encode the query string
querystring = parse.urlencode(parms)

# Make a GET request and read the response
u = request.urlopen(url+'?' + querystring)
resp = u.read()


POST把提交的数据则放置在是HTTP包的包体中。

Python中以POST方式抓取数据:

from urllib import request, parse 
...
u = request.urlopen(url, querystring.encode('ascii'))



除了urllib,也可以用request达到相同目的,而且更强大,比如加上请求头:

import requests
...
# Extra headers
headers = { 'User-agent' : 'none/ofyourbusiness', 'Spam' : 'Eggs'} 
resp = requests.post(url, data=parms, headers=headers)
 
# Decoded text returned by the request
text = resp.text



Extract请求头信息:

import requests
resp = requests.head('http://www.python.org/index.html')
status = resp.status_code 
last_modified = resp.headers['last-modified'] 
content_type = resp.headers['content-type'] 
content_length = resp.headers['content-length']



实现登录:

import requests
resp = requests.get('http://pypi.python.org/pypi?:action=login',
auth=('user','password'))



Pass cookies

import requests

# First request
resp1 = requests.get(url) 

# Second requests with cookies received on first requests
resp2 = requests.get(url, cookies=resp1.cookies)



用POST上传资源

import requests
url = 'http://httpbin.org/post'
files = { 'file': ('data.csv', open('data.csv', 'rb')) }
r = requests.post(url, files=files)

参考资料:《Python Cookbook》

相关文章

  • Flask学习笔记之HTTP(一)

    先整理一下HTTP基础知识: HTTP 方法:GET 对比 POST HTTP 的工作方式是客户机与服务器之间的请...

  • SQLAlchemy

    Flask学习记录之Flask-SQLAlchemy http://www.cnblogs.com/agmcs/p...

  • 《Flask Web开发实战》—— HTTP

    本书第二章Flask之HTTP,对一些内容做个笔记,方便回顾。 1. HTTP请求 request对象封装了请求报...

  • flask学习笔记(一):回顾HTTP通信

    参考博客 HTTP 请求报文 响应报文 一、HTTP请求报文 1. 起始行 2. 请求头 headers 2.1....

  • Flask学习笔记之第一个Flask程序

    笔记大纲 最近在学习Flask框架,本系列课程为学习笔记。大纲: Python环境 创建Flask项目 Debug...

  • Flask框架学习

    Flask框架学习http://www.pythondoc.com/flask-mega-tutorial/hel...

  • python flask安装和命令

    Flask Web开发实战学习笔记 Flask简介 Flask是使用Python编写的Web微框架。Web框架可以...

  • flask备课

    学习 Flask 函数 模块 类 与 实例 装饰器 http://www.bjhee.com/flask-4.ht...

  • Flask学习笔记之模板(一)

    大纲 之前的视图函数返回的都是字符串,这样是很不利于网站建设,大家都知道,我们都网页构造三大元素(html,css...

  • 课堂笔记

    Flask课堂笔记 1. HTTP通信与Web框架 1.1 流程 客户端将请求打包成HTTP的请求报文(HTTP协...

网友评论

      本文标题:Flask学习笔记之HTTP(一)

      本文链接:https://www.haomeiwen.com/subject/vmebdttx.html