requests模块入门

安装

pip install request

引用

import request

支持的python版本(2,3版本都支持)

python2.X 有这些库名可用: urllib, urllib2, urllib3, httplib, httplib2, requests

python3.X 有这些库名可用: urllib, urllib3, httplib2, requests

两者都有的urllib3和requests, 它们不是标准库.  

urllib3 提供线程安全连接池和文件post支持,与urllib及urllib2的关系不大.

requests 自称HTTP for Humans, 使用更简洁方便

get请求 

参数就url,params,返回的是一个Response类对象(源码太长了,自己用ctrl+b看源码),这个Response类有很多方法,常用的方法有:status_code,text,content,cookies,encoding,

注意:response.text和 response.context的区别


def get(url, params=None, **kwargs):
    r"""Sends a GET request.

    :param url: URL for the new :class:`Request` object.
    :param params: (optional) Dictionary, list of tuples or bytes to send
        in the body of the :class:`Request`.
    :param \*\*kwargs: Optional arguments that ``request`` takes.
    :return: :class:`Response <Response>` object
    :rtype: requests.Response
    """

    kwargs.setdefault('allow_redirects', True)
    return request('get', url, params=params, **kwargs)

一个完整的get请求,应该包括请求行(url请求头(headers)请求参数(params)

下面这个例子,没有定义headers  ,  可以抓包后,把headers参数值带上

import requests


url='https://www.sogo.com?'
para={'query':'tesla'}

'''不验证服务器的ssl证书,运行会警告D:\Python34\lib\site-packages\urllib3\connectionpool.py:847: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings InsecureRequestWarning)
'''
r=requests.get(url,params=para, verify=False, allow_redirects=False)

#verify=True验证服务器的SSL证书,运行没有警告
#r=requests.get(url,params=para, verify=True, allow_redirects=False)


print('状态码是',r.status_code)
print('text的结果是',r.text)      #返回的结果是in unicode,如果你想取文本,可以通过r.text
print('content的结果是',r.content)#返回的结果是in bytes,如果想取图片,则可以通过r.content
print('cookie的结果是',r.cookies)
print('encoding的结果是',r.encoding)#一般返回的结果是UTF-8
print('raw的结果',r.raw)
print('header的结果',r.headers) #以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在则返回None
    

POST请求

如果  body={“name1”:”value1”, “name2”,”value2”}

注意:当请求Bodyjson的时候,json=body  表示自动将python里面的字典,转为json格式参数了

response.json是应答的内容转成json

如果 body="name1=value1&name2=value2",就不用json格式的必备参数json=body,就必须要用data=body

def post(url, data=None, json=None, **kwargs):
    r"""Sends a POST request.

    :param url: URL for the new :class:`Request` object.
    :param data: (optional) Dictionary, list of tuples, bytes, or file-like
        object to send in the body of the :class:`Request`.
    :param json: (optional) json data to send in the body of the :class:`Request`.
    :param \*\*kwargs: Optional arguments that ``request`` takes.
    :return: :class:`Response <Response>` object
    :rtype: requests.Response
    """

    return request('post', url, data=data, json=json, **kwargs)

练习:

找个自己公司内部的网站(最后是测试后台之类的简单的,无验证码的),用脚本实现登录

COOKIE修改成登陆后的(实现多少天免登陆)

COOKIES的修改

实例化一个对象,然后set值,把这个对象update到get请求对应的cookie里

coo = requests.cookies.RequestsCookieJar()  

coo.set('cookie-name', 'cookie-value', path='/', domain='.xxx.com')  

s.cookies.update(c) 

 

怎么跨请求保持一个cookie

Session对象(会话对象)让你能够跨请求保持某些参数,同一个session的所有请求之间保持cookie.同一个主机发送多个请求,底层的TCP连接被重用,从而带来显著的性能提升。

 

# coding:utf-8
import requests

# 先打开登录首页,获取部分cookie
url = "https://passport.cnblogs.com/user/signin"
headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0"
           } 
# get方法加个ser-Agent就可以了

r = requests.get(url, headers=headers,verify=False)

print
r.cookies  # 添加前的cookies

# 添加登录需要的两个cookie
coo = requests.cookies.RequestsCookieJar()
coo.set('.CNBlogsCookie', 'xxx')              # 填上面抓包内容
coo.set('.Cnblogs.AspNetCore.Cookies','xxx')  # 填上面抓包内容
r.cookies.update(c)

print
r.cookies  # 添加后的cookies

 

 

session保持会话

重定向

猜你喜欢

转载自blog.csdn.net/lelemom/article/details/83897129