zoukankan      html  css  js  c++  java
  • python-requests向服务器发送请求(post/get)

    python处理http请求有很多库,,比如python的原生库:urllib包、requests类库等

    requests库和urllib包对比:

    urllib和urllib2是相互独立的模块,python3.0以上把urllib和urllib2合并成一个库了,requests库使用了urllib3。requests库的口号是“HTTP For Humans”,为人类使用HTTP而生,用起来不知道要比python原生库好用多少呢,比起urllib包的繁琐,requests库特别简洁和容易理解。

    从以下几个方面进行对比:

    1)构建参数:在构建请求参数时,第一种需要将请求参数使用urllib库的urlencode方法进行编码预处理,非常麻烦

    2)请求方法:发送get请求时,第一种使用的urllib库的urlopen方法打开一个url地址,而第二种直接使用requests库的get方法,与http请求方式是对应的,更加直接、易懂

    3)请求数据:第一种按照url格式去拼接一个url字符串,显然非常麻烦,第二种按顺序将get请求的url和参数写好就可以了

    4)处理响应:第一种处理消息头部、响应状态码和响应正文时分别使用.info()、.getcode()、.read()方法,第二种使用.headers、.status_code、.text方法,方法名称与功能本身相对应,更方便理解、学习和使用

    5)连接方式:看一下返回数据的头信息的“connection”,使用urllib库时,"connection":"close",说明每次请求结束关掉socket通道,而使用requests库使用了urllib3,多次请求重复使用一个socket,"connection":"keep-alive",说明多次请求使用一个连接,消耗更少的资源

    6)编码方式:requests库的编码方式Accept-Encoding更全,

    ps:requests库的官网是http://www.python-requests.org/en/master/,里面有操作文档

    介绍下requests库的使用

    # HTTP请求类型
    # get类型
    r = requests.get('https://github.com/timeline.json')
    # post类型
    r = requests.post("http://m.ctrip.com/post")
    # put类型
    r = requests.put("http://m.ctrip.com/put")
    # delete类型
    r = requests.delete("http://m.ctrip.com/delete")
    # head类型
    r = requests.head("http://m.ctrip.com/head")
    # options类型
    r = requests.options("http://m.ctrip.com/get")
    
    # 获取响应内容
    print(r.content) #以字节的方式去显示,中文显示为字符
    print(r.text) #以文本的方式去显示
    
    #URL传递参数
    payload = {'keyword': '香港', 'salecityid': '2'}
    r = requests.get("http://m.ctrip.com/webapp/tourvisa/visa_list", params=payload) 
    print(r.url) #示例为http://m.ctrip.com/webapp/tourvisa/visa_list?salecityid=2&keyword=香港
    
    #获取/修改网页编码
    r = requests.get('https://github.com/timeline.json')
    print (r.encoding)
    
    
    #json处理
    r = requests.get('https://github.com/timeline.json')
    print(r.json()) # 需要先import json    
    
    # 定制请求头
    url = 'http://m.ctrip.com'
    headers = {'User-Agent' : 'Mozilla/5.0 (Linux; Android 4.2.1; en-us; Nexus 4 Build/JOP40D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19'}
    r = requests.post(url, headers=headers)
    print (r.request.headers)
    
    #复杂post请求
    url = 'http://m.ctrip.com'
    payload = {'some': 'data'}
    r = requests.post(url, data=json.dumps(payload)) #如果传递的payload是string而不是dict,需要先调用dumps方法格式化一下
    
    # post多部分编码文件
    url = 'http://m.ctrip.com'
    files = {'file': open('report.xls', 'rb')}
    r = requests.post(url, files=files)
    
    # 响应状态码
    r = requests.get('http://m.ctrip.com')
    print(r.status_code)
        
    # 响应头
    r = requests.get('http://m.ctrip.com')
    print (r.headers)
    print (r.headers['Content-Type'])
    print (r.headers.get('content-type')) #访问响应头部分内容的两种方式
        
    # Cookies
    url = 'http://example.com/some/cookie/setting/url'
    r = requests.get(url)
    r.cookies['example_cookie_name']    #读取cookies
        
    url = 'http://m.ctrip.com/cookies'
    cookies = dict(cookies_are='working')
    r = requests.get(url, cookies=cookies) #发送cookies
    
    #设置超时时间
    r = requests.get('http://m.ctrip.com', timeout=0.001)
    
    #设置访问代理
    proxies = {
               "http": "http://10.10.1.10:3128",
               "https": "http://10.10.1.100:4444",
              }
    r = requests.get('http://m.ctrip.com', proxies=proxies)
    
    
    #如果代理需要用户名和密码,则需要这样:
    proxies = {
        "http": "http://user:pass@10.10.1.10:3128/",
    }
    

    json中json.loads()和json.dumps()的区别

    json.loads() 是将字符串传化为字典
    json.dumps () 是将字典转化为字符串

    举列

    一、python向服务器发送一个带参数的get请求

    import requests
    import json
    
    def fun_httpget():
        date1={'wd': 'python'}
        r = requests.get(url='https://dict.baidu.com/s',params=date1)
        r.text
        print(r.text)
    fun_httpget()

    响应结果为html格式内容,打开即为我们百度搜索python结果

    二、python向服务器发送一个post请求。

    请求报文格式为json格式,

    #coding=utf-8
    from urllib import request, parse
    import urllib
    import requests
    import json
    import excelTestConfigure
    import Log
    
    def fun_httprequest(dict_qurey_data):
        logname='request_post'
        url = 'http://ip:port/path'
        print(url)
        s = json.dumps(dict_qurey_data)
        print(s)
        headers = {'Content-Type': 'servicejson;charset=UTF-8'}
        r = requests.post(url=url, data=dict_qurey_data,headers=headers)
        respode=r.text
        print('响应报文为')
        print (respode)
        ret_dict = json.loads(respode)#��str����ת��Ϊdict����
        return ret_dict
    dict_qurey_data="{'client_name': 'TRUE,0', 'card_no': '6216610100008898222', 'partner_trans_time': '192552', 'partner_trans_date': '201705101', 'partner_serial_no': 'AutoTestJin20201201192552934659', 'cvv2': '987', 'mobile_tel': '15988179711', 'pay_bankacct_type': '0', 'id_kind': '0', 'partner_id': 'A0003123', 'valid_date': '0817', 'id_no': '320113196912021509', 'func_code': '1'}"
    fun_httprequest(dict_qurey_data)
        
    

     可以得到服务器结果的请求和响应

    参考:https://www.cnblogs.com/lanyinhao/p/9634742.html

  • 相关阅读:
    执行chmod -R 777 / 补救
    kill详解
    find详解
    htop详解
    C#正则表达式经典分类整理集合手册
    C# 正则表达式大全
    各种新主流.net混淆加密软件对比
    string format double
    System.Timers.Timer
    System.Threading.Timer
  • 原文地址:https://www.cnblogs.com/qiaoli0726/p/14070507.html
Copyright © 2011-2022 走看看