zoukankan      html  css  js  c++  java
  • requests模块

    #各种请求方式:常用的就是requests.get()和requests.post()
    >>> import requests
    >>> r = requests.get('https://api.github.com/events')请求页面,并返回页面内容
    >>> r = requests.post('http://httpbin.org/post', data = {'key':'value'})大多用于提交表单或上传文件,数据包含在请求体中			
    >>> r = requests.put('http://httpbin.org/put', data = {'key':'value'})从客户端向服务器传送的数据取代指定文梢中的内容
    >>> r = requests.delete('http://httpbin.org/delete')请求服务器删除指定的页面
    >>> r = requests.head('http://httpbin.org/get')类似于GET 请求, 只不过返回的响应中没有具体的内容,用于获取报头
    >>> r = requests.options('http://httpbin.org/get')允许客户端查看服务器的性能
    >>> r = requests.connect('http://httpbin.org/get') 把服务器当作跳板,让服务器代替客户端防问其他网页
    >>> r = requests.trace('http://httpbin.org/get')囚显服务器收到的请求,主要用于测试或诊断
    
    	(1)Content-Type 和POST 提交数据方式的关系:
    		application /x-www-forrn-urlencoded	表单数据
    		multi part/form-data				表单文件上传
    		application/json					序列化JSON 数据
    		text/xml							XML 数据
    
    
    		handers一般网站采用下列7个作为请求头
    		{
    		Host
    		Connection
    		Accept
    		User-Agent
    		Referrer
    		Accept-Econding
    		Accept-Language
    		}
    
    headers:
    	from fake_useragent import UserAgent
    	ue = UserAgent()
    	headers = {'User-Agent':ue.random}
    	
    data:
    	requests.post(url, data = data)
    
    		
    解析json:
    	res = requests.get("http://httpbin.org")
    	res.json()
    	# 返回json格式字符串
    
    获取属性内容:
    	res.text		# 获取为html,str类型
    	res.content		# 获取为html,二进制类型
    	res.status_code	# 获取状态码,int
    	res.headers		# 获取头信息,dict
    	res.cookies		# 获取cookie,dict
    	res.url 		# 获取连接,str
    	res.history		# 获取历史记录,list
    	
    	
    cookie模拟登陆验证:
    	自动跟踪会话对象 
    	session = requests.Session() 
    		1、可以持续跟踪cookie,headers
    		2、跟踪运行的HTTP协议信息
    		3、 res = session.post() 与 res = requests.post()参数一致
    			res = session.get() 与 	res = requests.get()参数一致
    		
    			例子:
    			--------------------------------------------使用session
    			import requests
    			
    			session = requests.Seesion()
    			
    			params = {'username':'username','password':'password'}
    			
    			res1 = session.post(url_php,params)
    			
    			res2 = session.get(url_file)
    			# res2 的 cookie 与 res1 相同
    			
    			------------------------------------------不使用session
    			import requests
    
    			params = {'username':'username','password':'password'}
    
    			r = requests.post('url_php',params)
    			print(r.cookies.get_dict())
    			
    			cookies = r.cookies
    			
    			r = requests.get('url_file',cookies)
    			print(r.text)	
    			# 每一次保持cookie打开连接,都需要添加cookie
    
    		
    HTTP登录认证:
    	(1)
    		import requests
    		from requests.auth import HTTPBasicAuth
    		
    		#生成HTTPBasicAuth对象,参数为cookie
    		auth = HTTPBasicAuth('ryrl','password')
    		r = requests.post('http://pythonscraping.com/pages/auth/login.php',auth = auth)
    		print(r.text)
    	(2)
    		import requests
    	
    		r = requests.post('http://pythonscraping.com/pages/auth/login.php',auth = ('user','password'))
    
    SSL证书:
    	(i)设置verify=False,忽略ssl验证。已经忽略ssl警告
    		import requests
    		from requests.packages import urllib3
    		
    		urllib3.disable_warnings()
    		res = requests.get('http://www.12306.cn',verify = False)
    		res.status_code
    	(ii)设置证书路径
    		import requests
    		
    		res = requests.get('http://www.12306.cn',cert = ('/path/server.crt','/path/key'))
    		print(res.status_code)
    
    
    代理IP:
    	(1)常规
    			>>> import requests
    
    			>>> proxies = {
    			  "http": "http://10.10.1.10:3128",
    			  "https": "http://10.10.1.10:1080",
    			}
    
    			>>> requests.get("http://example.org", proxies=proxies)
    			你也可以通过环境变量 HTTP_PROXY 和 HTTPS_PROXY 来配置代理。
    
    			$ export HTTP_PROXY="http://10.10.1.10:3128"
    			$ export HTTPS_PROXY="http://10.10.1.10:1080"
    
    			$ python
    			>>> import requests
    			>>> requests.get("http://example.org")
    			若你的代理需要使用HTTP Basic Auth,可以使用 http://user:password@host/ 语法:
    
    			>>> proxies = {
    				"http": "http://user:pass@10.10.1.10:3128/",
    			}
    			要为某个特定的连接方式或者主机设置代理,使用 scheme://hostname 作为 key, 它会针对指定的主机和连接方式进行匹配。
    
    			>>> proxies = {'http://10.20.1.128': 'http://10.10.1.10:5323'}
    			注意,代理 URL 必须包含连接方式。
    	(2)需要密码登陆:
    			>>> import requests
    			>>> user = 'loli'
    			>>> passwrod = '123456'
    			>>> ip_user = "http://"+user+":"+passwrod+"@10.10.1.10:3128"
    					# 拼接后"http://loli:123456@10.10.1.10:3128"
    			>>> proxies = {
    			  "http": ip_user,}
    
    			>>> requests.get("http://example.org", proxies=proxies)
    	(3)使用socks代理
    			>>> import requests
    			>>> proxies = {
    			  "http": "sock5://user:passwrod@10.10.1.10:3128",
    			  "https": "sock5://user:passwrod@10.10.1.10:1080",
    			}
    			>>> res = requests.get("http://www.taobao.com",proxies=proxies)
    			
    			
    异常超时设置:
    	ReadTimeout类
    	from requests.exceptions import ReadTimeout,ConnectionError,RequestException
    	
    	try:
    		...
    	except ReadTimeout:
    		print('连接超时')
    	except ConnectionError:
    		print('网络问题')
    	except RequestException:
    		print("无网络")
    		
    
    	
    	
    
    	
    	
    	
    

      

  • 相关阅读:
    MySQL经典面试题--SQL语句
    awk命令
    mysql安装配置
    notepad++使用
    Xshell使用
    说明
    对 MMO 游戏的调研
    对 VR 项目开发流程的调研
    对 Unity 动态加载资源的调研
    对 Unity 太空射击游戏的实践
  • 原文地址:https://www.cnblogs.com/7134g/p/11516899.html
Copyright © 2011-2022 走看看