Requests(二)POST

1. 最基本post方法

response = requests.post("http://www.baidu.com/", data = data)

2. 传入data数据

对于 POST 请求来讲,咱们通常须要为它增长一些参数。那么最基本的传参方法能够利用 data 这个参数。html

import requests

formdata = {
"type":"AUTO",
"i":"i love python",
"doctype":"json",
"xmlVersion":"1.8",
"keyfrom":"fanyi.web",
"ue":"UTF-8",
"action":"FY_BY_ENTER",
"typoResult":"true"
}

url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartre    sult=ugc&sessionFrom=null"

headers={ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"}

response = requests.post(url, data = formdata, headers = headers)

print (response.text)

# 若是是json文件能够直接显示
print (response.json())

运行结果python

{"type":"EN2ZH_CN","errorCode":0,"elapsedTime":3,"translateResult":[[{"src":"i love python","tgt":"我喜欢python"}]],"smartResult":{"type":1,"entries":["","肆文","","","高德纳","",""]}}

{'type': 'EN2ZH_CN', 'errorCode': 0, 'elapsedTime': 3, 'translateResult': [[{'src': 'i love python', 'tgt': '我喜欢python'}]], 'smartResult': {'type': 1, 'entries': ['', '肆文', '', '', '高德纳', '', '']}}

3. 代理(proxies参数)

若是须要使用代理,你能够经过为任意请求方法提供 proxies 参数来配置单个请求:web

import requests

# 根据协议类型,选择不一样的代理
proxies = {
"http": "http://12.34.56.79:9527",
"https": "http://12.34.56.79:9527",
}

response = requests.get("http://www.baidu.com", proxies = proxies)
print response.text

也能够经过本地环境变量 HTTP_PROXY 和 HTTPS_PROXY 来配置代理:json

export HTTP_PROXY="http://12.34.56.79:9527"
xport HTTPS_PROXY="https://12.34.56.79:9527"

4. 私密代理验证(特定格式) 和 Web客户端验证(auth 参数)

私密代理浏览器

import requests

 若是代理须要使用HTTP Basic Auth,可使用下面这种格式:
proxy = { "http": "mr_mao_hacker:sffqry9r@61.158.163.130:16816" }

response = requests.get("http://www.baidu.com", proxies = proxy)

print (response.text)

web客户端验证安全

若是是Web客户端验证,须要添加 auth = (帐户名, 密码)服务器

mport requests

auth=('test', '123456')

response = requests.get('http://192.168.199.107', auth = auth)

print (response.text)

5. Cookies 和 Sission

Cookiescookie

若是一个响应中包含了cookie,那么咱们能够利用 cookies参数拿到:session

import requests

response = requests.get("http://www.baidu.com/")

# 7\. 返回CookieJar对象:
cookiejar = response.cookies

# 8\. 将CookieJar转为字典:
cookiedict = requests.utils.dict_from_cookiejar(cookiejar)

print (cookiejar)

print (cookiedict)

运行结果:post

<RequestsCookieJar[<Cookie BDORZ=27315 for .baidu.com/>]>

{'BDORZ': '27315'}

session

在 requests 里,session对象是一个很是经常使用的对象,这个对象表明一次用户会话:从客户端浏览器链接服务器开始,到客户端浏览器与服务器断开。

会话能让咱们在跨请求时候保持某些参数,好比在同一个 Session 实例发出的全部请求之间保持 cookie 。

5. 处理HTTPS请求 SSL证书验证

Requests也能够为HTTPS请求验证SSL证书:

要想检查某个主机的SSL证书,你可使用 verify 参数(也能够不写)

import requests
response = requests.get("https://www.baidu.com/", verify=True)

# 也能够省略不写
# response = requests.get("https://www.baidu.com/")
print (r.text)

运行结果:

<!DOCTYPE html>
<!--STATUS OK--><html> <head><meta http-equiv=content-type
content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible
content=IE=Edge>百度一下,你就知道 ....

若是SSL证书验证不经过,或者不信任服务器的安全证书,则会报出SSLError,听说 12306 证书是本身作的:

来测试一下:

import requests
response = requests.get("https://www.12306.cn/mormhweb/")
print (response.text)

果真:

SSLError: ("bad handshake: Error([('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')],)",)

若是咱们想跳过 12306 的证书验证,把 verify 设置为 False 就能够正常请求了。

r = requests.get("https://www.12306.cn/mormhweb/", verify = False)
相关文章
相关标签/搜索