GET请求:
GET 请求的参数一般放到浏览器地址后面 用? $key=value 方式传输
如:type=11&interval_id=100%3A90&action=&start=0&limit=1
可在抓包工具的 Querry String 中查看
POST 请求:
url地址:并不是浏览器地址,而是抓包后的地址
Data参数:Request请求对象的里有data参数,它就是用在POST里的,我们要传送的数据就是这个参数data,一般data 先弄成字典,然后根据Python 环境,转成key=value 类型字符串或 bytes,iterable.
python2 和python3 差异
python2:
data是一般是字典,里面要匹配键值对,然后用urlencode() 转换成kye = value字符串
data 如果遇到中文参数,也需要利用 urlencode 进行转码成key=value 格式
python 3
data 先弄成字典,然后传urlencode() 转 key=value 字符串,再encode('utf-8') 转bytes
发送POST请求时,需要特别注意headers的一些属性:
Content-Length: 144: 是指发送的表单数据长度为144,也就是字符个数是144个。
X-Requested-With: XMLHttpRequest :表示Ajax异步请求。
Content-Type: application/x-www-form-urlencoded : 表示浏览器提交 Web 表单时使用,表单数据会按照 name1=value1&name2=value2 键值对形式进行编码。
# in python2 不考虑编码
import urllib # In Python 3 urllib.parse
import urllib2 # In Python 3 urllib.request
# POST请求的目标URL
url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=null"
headers={"User-Agent": "Mozilla...."}
formdata = { # form 请求需要data 参数
"type":"AUTO",
"i":"i love python",
"doctype":"json",
"xmlVersion":"1.8",
"keyfrom":"fanyi.web",
"ue":"UTF-8",
"action":"FY_BY_ENTER",
"typoResult":"true"
}
data = urllib.urlencode(formdata) # 将字典转换成 key = value 格式
request = urllib2.Request(url, data = data, headers = headers)
response = urllib2.urlopen(request)
print response.read()
异步Ajax 请求处理:
url: 找到ajax 请求的url
返回内容:一般是JSON格式文件
查询参数:将Querry string 放到 data 里面
如:获取豆瓣电影剧情排行,通过修改start 和limit 的值,来加载不同的数据
python 2
#coding:utf-8
# in Python 2 不考虑编码测试通过
import urllib,urllib2
url = 'https://movie.douban.com/j/chart/top_list?type=11&interval_id=100:90&action='
formdata = {
'start':"0",
'limit':"20",
}
data = urllib.urlencode(formdata)
headers = {
'User-Agent':"Mozilla/5.0 (X11; Ubuntu; Lin… Gecko/20100101 Firefox/54.0'
}
request = urllib2.Request(url,data=data,headers=headers)
response = urllib2.urlopen(request)
json = response.read()
print json
python 3 注意转码
# in Python 3
import urllib.request
import urllib.parse
url = 'https://movie.douban.com/j/chart/top_list?type=24&interval_id=100%3A90&action='
formdata ={
'start':0,
'limit':20,
}
data = urllib.parse.urlencode(formdata).encode('utf-8') # 注意转码
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36'
}
req = urllib.request.Request(url,data=data,headers=headers)
res = urllib.request.urlopen(req)
json = res.read().decode('utf-8') # 注意转码
print(json)