美文网首页
python request 请求方式 格式转换 乱码等问题解

python request 请求方式 格式转换 乱码等问题解

作者: freedom_smile | 来源:发表于2021-11-17 19:27 被阅读0次

    参考链接:https://developer.51cto.com/art/202102/645705.htm
    请求参数:

     params = {
         "a": 0,
         "b": "hello"
     }
    
    • 请求参数的值 格式是 JsonList
      解决方案:将参数处理下:json.dumps()
     params = {
         "a": 0,
         "b": "hello",
         "c": json.dumps([{"a":1,"b":"5.png"},{"a":2,"b":"8.png"}])
     }
    
    • 请求参数类型为列表 例如从excel取的类型是字符串 需要将字符串列表转换为列表
      解决方案:将参数处理下:json.loads()
     params = {
         "a": 0,
         "b": "hello",
         "c": json.loads('["10004","10009"]')
     }
    
    • 请求值里面有双引号 // 可以使用单引号
     params = {
         "a": 0,
         "b": "hello",
         "c": json.dumps([{"a":1,"b":"5.png"},{"a":2,"b":"8.png"}]),
         "appNote": '<img src="//img.a.com/pc07.png" alt=""/>'
     }
     
    
    • request 安全证书
      解决方案:verify=False
    requests.post(url, params=params, verify=False)
    
    • 警告
      解决方案:增加信息
    import urllib3 
    urllib3.disable_warnings() 
    
    • 参数放在 body 里面的 post 请求 data=
    requests.post(url, data=params)
    
    • 参数不放在 body 里面的 post 请求 放在QueryString params=
    requests.post(url, params=params)
    
    • 如果两个地方同时都有,那么就可以同时传两个,一一对应就可以
     params = {
         "a": 0,
         "b": "hello"
     }
    body = {
        "c":10,
        "d":"hi"
    }
    requests.post(url,params=params,data=body) 
    
    • 没有登录 增加cookie
    cookies = get_cookie()
    requests.post(url, data=params, cookies=cookies)
    
    // 示例写固定路径  项目可用相对路径,文件名参数化
    def get_cookie():
        txt_file = r"D:\python\data\cookies.txt"
        f=open(txt_file,'r')#打开所保存的cookies内容文件
        cookies={}#初始化cookies字典变量
        for line in f.read().split(';'):   #按照字符:进行划分读取
            #其设置为1就会把字符串拆分成2份
            name,value=line.strip().split('=',1)
            cookies[name]=value  #为字典cookies添加内容
        return cookies
    

    post 请求要注意它的数据类型到底是哪种

    • 常见的有四种,并不是只有四种 application/json 是 json= 其他都是 data=
      1.第一种是 application/json:{“key1“:”value1”,“keyt2":“value2"}
      2.第二种是 application/x-www-form-urlencoded:name1= value1&name2=value2
      3.第三种是 multipart/form-data:这一种是表单格式的(文件上传 file=,图片上传等混合式)
      4.Content-Type:octets/stream(文件下载)
      5.text/xml
    • 一般格式的请求头
    headers = {
        'user-agent': ***,   //有代理限制的时候加上
        'Accept': 'application/json',   // 有限制的时候加上
        'Content-Type': 'application/x-www-form-urlencoded',
    }
    requests.post(url, data=params, headers=headers)
    
    • json格式的 请求头
     headers = {
            'Content-Type':'application/json'
     }
    requests.post(url, json=params, headers=headers)
    // 或者
    requests.post(url, data=json.dumps(params), headers=headers)
    
    • 返回 302 重定向
    r = requests.post(url, json=params,headers=headers,cookies=cookies,allow_redirects=False)
    
    • 打印输入输出信息 返回格式中文输出乱码
    log.info("请求信息:" + str(json.dumps(result['req'],ensure_ascii=False)))
    
    • 打印输入输出信息 json格式转换
    log.info("请求信息:" + str(json.dumps(result['req'],cls=NpEncoder)))
    
    import json
    import numpy as np
    
    class NpEncoder(json.JSONEncoder):
        def default(self, obj):
            if isinstance(obj, np.integer):
                return int(obj)
            elif isinstance(obj, np.floating):
                return float(obj)
            elif isinstance(obj, np.ndarray):
                return obj.tolist()
            else:
                return super(NpEncoder, self).default(obj)
    
    delect 一个实例
    • params放在QueryString的参数
    • body_data body里的数据 可为list 字典都支持
    params = {
         "a": 0,
         "b": "hello"
     }
    body_data = ["hello","world"]   # 可为list,字典都行
    headers = {
         'content-type': 'application/json'
    }
    cookies = get_cookie(file_name='cookies.txt')
    #接口请求
    r = requests.delete(url,params = params,json=json.dumps(body_data),headers=headers,cookies=cookies)
    
    文件上传 一个实例 带参数和图片上传
    img_name = 'tu.jpeg'   #文件名称
    file_path = r'd:\img\tu.jpeg'   # 文件路径 建议用相对路径
    file = open(file_path,"rb")   # 文件 也可使用 with open * as file file.read()调用
    img_type = 'image/jpeg'   # 文件类型 
    # 除了文件以外其他参数
    data = {  
        "a": 1,
        "b": "bbb"
    }
    files = {
        "c" : (img_name,file,img_type)
    }
    r = requests.post(url, data=data,files=files,headers=headers,cookies=cookies)
    

    相关文章

      网友评论

          本文标题:python request 请求方式 格式转换 乱码等问题解

          本文链接:https://www.haomeiwen.com/subject/wsfrtrtx.html