• python-requests模块


    requests模块

    一、发送请求

    • 向某个url发送get请求

      requests.get("https://www.baidu.com")
      
    • 发送一个post请求

      requests.post("https://www.baidu.com",data={"name":"zhuyu"})
      
    • 发送其他类型的请求也都可以

    二、传递url参数

    • get请求传递参数

      arg = {"name":"zhuyu","password":"123"}
      requests.get("www.baidu.com",params=ars)
      
    • post请求传递参数

      data = {"key":"value"}
      requests.post("www.baidu.com",data=data)
      

    三、响应内容

    • 获取响应的内容

      response = requests.get("www.baidu.com")
      html = response.text  # html就是网站的源码
      url = response.url    # 请求的url
      
    • 二进制响应内容

      response.content       # 返回的是二进制数据
      
    • json响应内容

      response.json          
      # 如果响应的是json格式,它会自动帮你处理json数据,如果不能转换的话,会抛出异常
      # 注意有的服务器在失败的响应也会返回json对象,请使用raise_for_status()或者status_code进行校验
      

    四、指定请求头

    url = "www.baidu.com"
    headers = {
        "user-agent":"xixi"
    }
    response = requests.get(url=url,headers=headers)
    

    五、复杂的post请求

    • 传递类似html表单的数据

      url = "www.baidu,com"
      data = {"name":"zhuyu"}
      requests.post(url=url,data=data)
      
    • 传递json格式数据

      import json
      url = "www.baidu,com"
      data = {"name":"zhuyu"}
      # 方式一:
      requests.post(url=url,data=json.dumps(data))
      # 方式二:
      requests.post(url=url,json=data)
      

    六、上传文件

    url = "www.baidu,com"
    files = {"file":open("a.txt","rb")}
    requests.post(url=url,files=files)
    

    七、响应状态码

    response = requests.get("www.baidu.com")
    status_code = response.status_code  # 获取状态码
    
    # 如果返回一个400,500的状态码,可以通过raise_for_status()来抛出异常
    

    八、响应头

    response.headers     # 这是响应的头部信息
    

    九、cookie信息

    • 获取响应头的cookie信息

      cookie = response.cookie   #获取到cookie的字典
      
    • 为requests设置cookie信息

      # cookie它是RequestsCookieJar的对象
      cookies = requests.cookoes.RequestsCookieJar()
      cookies.set("name","zhuyu")
      cookies.set("password":"123")
      requests.get(url,cookies=cookies)
      

    十、重定向与请求历史

    • history方法

      这是response对象里的一个方法或者属性,它是一个对象列表,按照从最老到最近的请求进行排序的
      
    • allow_redirects参数,模式为True的

      response = requests.get(url=url,allow_redirects=False)
      # 上面代码是禁止了重定向
      

    十一、超时

    你可以告诉reuqests在经过timeout参数设定的秒数时间之后停止等待响应

    requests.get(url=url,timeout=5)
    

    十二、错误与异常

    错误 异常
    遇到网络问题 Requests会抛出ConnectionError异常
    返回了不成功的状态码 Response会抛出raise_fir_status异常
    请求超时 抛出Timeout异常
    若请求超过了设定的最大重定向次数 抛出TooManyRedirects异常

    十三、会话对象

    会话对象让你在能够跨请求保持某些参数

    # 拿到一个会话对象,这个会话同样能实现requests中的方法
    session = requests.Session()
    # 通过会话对象发送一个get请求到url
    session.get(url=url)
    
    ------------------------------------------------------
    # 会话也可用来为请求方法提供数据
    session = requests.Session()
    session.headers.update({"name":"zhuyu"})
    session.get(url,headers={"age":22})
    # 此时在本次请求的请求中有name:"zhuyu"&age:22,这两对键值对
    
    ------------------------------------------------------
    # 上面这个只是在会话层面,如果在方法层面呢?参数是不会被跨请求保持的
    session = requests.Session()
    session.get(url=url,cookies={"name":"zhuyu"})
    # 此时发送的get请求是带上"name"="zhuyu"这是cookie的
    # 下面还是同一个session对象,我再发一个get请求,此时我没有写cookies这个参数
    session.get(url=url)
    # 结果:你会发现本次请求没有带上cookie
    

    十四、请求与响应对象

    response = requests.get(url=url)
    # 列举下这行代码做了那几步
    # 1、生成了一个Request的对象,里面包含着所携带的数据,将该对象发送到某个服务器去请求
    # 2、一旦响应之后,就会产生一个Response的对象,这个对象包含着服务器传来的数据
    # 3、最后将这个Response对象赋值给了response这个变量
    ------------------------------------------------------------------------
    response.headers # 就是响应的请求头
    response.request.headers  # 就是请求的请求头
    

    十五、准备的请求(Prepared Request)

    import requests
    response = requests.get(url)
    # 其实请求最终还是以session对象发送的,
    session.send(Request对象,**kwargs)
    
    -------------------------------------
    from requests import Request,Session
    
    session = Session()
    
    req = Request("GET",url)
    
    request=PreparedRequest(req)
    # 官方文档说,我们可以在session对象send之前,对PreparedRequest对象再进行一些操作
    
    response = session.send(request,
                           stream=strean,
                           verify=verify,
                           proxies=proxies,
                           cert=cert,
                           timeout=timeout)
    print (response.status_code)
    

    十六、SSL证书验证(verify)

    Requests可以为HTTPS请求验证SSL证书,SSL验证默认是开启的,验证失败的话会抛出SSLError异常

    # 设置证书路径
    # 方式一:
    request.get(url=url,verify=路径)
    # 方式二:
    session = requests.Session()
    session.verify = 路径
    
    # verify对应:SSL证书路径
    

    十七、客户端证书(cret)

    # cert :指定证书的路径
    requests.get(url=url,cert=路径)
    
    session = requests.Session()
    session.cert = 路径
    
    

    十八、CA证书

    requests默认附带了一套它信任的证书,如果系统中装了certifi包,requests会试图使用它里面的证书,这样用户就不需要在修改代码的情况下更新他们信任的证书,所以我们经常更新certifi包

    十九、响应体内容工作流

    # stream:控制响应体内容的下载
    response = requests.get(url,stream=True)
    

    二十、流式上传(stream)

    # requests可以上传文件
    with open("a.txt","rb") as f:
        requests.post(url,data=f)
        
    # 注意:传送的数据也就是文件,应该是一个文件对象
    # 强烈建议建议使用二进制
    

    二十一、post上传多个分块编码的文件

    files = []
    

    二十二、事件挂钩(hooks)

    '''
    可用的钩子:response,从一个请求产生的响应
    用法:传递一个字典给hooks这个变量 {hook_name:callback_function}
    这个callback_function会接收一个数据块作为它的第一个参数
    hooks = dict(response=print_url)
    '''
    def print_url(response,*args,**kwargs):
        pass
    

    二十三、代理(proxies)

    import requests
    proxies = {
        "http":"http://10.10.1.10:3128",
        "https":"https://10.10.1.10:1080"
    }
    response = requests.get(url=url,proxies=proxies)
    
    
  • 相关阅读:
    Split Temporary Variable
    Introduce Explaining Variable
    Replace Temp with Query
    Extract Method
    自测代码的价值
    代码的坏味道
    Divergent Change & Shotgun Surgery
    Large Class
    Long Method
    Duplicated Code
  • 原文地址:https://www.cnblogs.com/zhuchunyu/p/10765828.html
Copyright © 2020-2023  润新知