19.4 get和post请求
一般HTTP请求提交数据,需要编码成URL编码格式,然后做为URL的一部分,或者作为参数传到Request对象中。
get请求一般用于向服务器获取数据
功能:批量获取网页贴吧数据
from urllib import request
from urllib import parse
url = "https://www.baidu.com/s?"
wd = input("请输入你要搜索的关键字:")
params = { "wd":wd }ps = parse.urlencode(params)
print(ps)
from urllib import request
from urllib import parse
headers = { "User-Agent":"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50" }
url = "https://www.baidu.com/s?"
wd = input("请输入你要搜索的关键字:")
params = { "wd":wd }
#获取编码格式
ps = parse.urlencode(params)
print(ps)
url = url + ps print(url)
# rsp = request.urlopen(url)
req = request.Request(url=url,headers=headers)
resp = request.urlopen(req)
data = resp.read()
print(data)
with open("get.html","wb") as f:
f.write(data)
post请求
Request请求对象里有data参数,这就是用在POST里的,我们要传送的数据就是这个参数data,data是一个字典,里面要有匹配键值对。
import urllib.request
import urllib url = "https://fanyi.youdao.com/translate?"
headers = { "User-Agent":"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50" }
word = input("请输入你要翻译的单词:")
from_data ={ "i":word, "from":"AUTO", "to":"AUTO", "smartresult":"dict", "client":"fanyideskweb", "doctype":"json", "version":"2.1", "keyfrom":"fanyi.web", "action":"FY_BY_REALTlME", }
data = urllib.parse.urlencode(from_data)
data = data.encode(encoding = "utf-8")
request = urllib.request.Request(url,data=data,headers=headers)
response = urllib.request.urlopen(request)
html = response.read().decode(encoding="utf-8").strip()
print(html)
GET方式是以直接以链接形式访问,链接中包含了所有参数,服务器端用Request.QueryString获取变量的值。如果包含了密码的话是一种不安全的选择,不过你可以直观地看到自己提交了什么内容。
POST则不会在网址上显示所有的参数,服务器端用Request.Form获取提交的数据,在Form提交的时候。但是HTML代码里如果不指定method属性,则默认为GET请求,Form中提交的数据将会附加在url之后,以?与url分开