美文网首页
python基础之类与对象的request模块、代码封装

python基础之类与对象的request模块、代码封装

作者: DayBreakL | 来源:发表于2019-10-01 12:23 被阅读0次

    request模块

    发送http请求

    import requests
    #get请求
    url="http://v.juhe.cn/laohuangli/d"
    data={"date":"2019-09-14","key":"3078e34cb750268b324e6c982726d00f"}
    response=requests.get(url) #返回一个消息实体
    print(response) #<Response [200]> 消息实体 响应状态码、响应头、响应正文全部封装在里面
    print("响应状态码:",response.status_code)
    print("响应头:",response.headers)
    print("响应正文:",response.text)
    
    #post请求,该接口支持get和post
    url_post="http://v.juhe.cn/laohuangli/d"
    data={"date":"2019-09-14","key":"3078e34cb750268b324e6c982726d00f"}
    response_1=requests.post(url,data) #返回一个消息实体
    print("响应状态码:",response_1.status_code)
    print("响应头:",response_1.headers)
    print("响应正文1:",response_1.text,type(response_1.text)) #<class 'str'>
    print("响应正文2:",response_1.json(),type(response_1.json())) #<class 'dict'>
    
    #cookie
    print("cookie:",response_1.cookies) #类字典形式,可以通过key获取值
    print(response_1.cookies["aliyungf_tc"])
    
    #headers
    #请求头,响应中是拿不到请求头的,所以需要加.request
    print("headers:",response_1.request.headers) 
    #{'User-Agent': 'python-requests/2.22.0'},由requests发出http请求
    print("headers中的User-Agent:",response_1.request.headers["User-Agent"])
    #篡改请求头中的参数,比如:某些网站限制只能通过浏览器发送请求,篡改User-Agent,伪装成浏览器
    header={"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6)"}
    response_2=requests.post(url,data,headers=header)
    #篡改成功,伪装成浏览器发送请求
    print("篡改后的User-Agent:",response_2.request.headers["User-Agent"]) 
    
    
    • html\xml\json都可以用.text
    • html\xml使用.json()会报错,它只支持响应是json格式的输出,响应是json格式时推荐使用这个方式,方便取值,可以根据key取值
    • print("headers:",response_1.request.headers)响应中是拿不到请求头的信息的,所以需要加.request

    代码的封装

    新建一个package,命名为API_AUTO开始我们接口自动化之旅,该package下新建一个名为tools的package,新建一个http_request模块,利用request封装get请求和post请求。tools作为工具类,之后存放我们抽象出来的

    """
    利用request封装get请求和post请求
    """
    class HttpRequest:
        '''
        url:请求的地址 http:ip:port/path
        param:传递的参数 非必填参数 字典格式传递参数
        '''
        def http_request(self):
            url="http://v.juhe.cn/laohuangli/d"
            data={"date":"2019-09-14","key":"3078e34cb750268b324e6c982726d00f"}
            response_1=requests.post(url,data) #返回一个消息实体
            print("响应状态码:",response_1.status_code)
            print("响应头:",response_1.headers)
            print("响应正文:", response_1.json())
    
    # 测试
    if __name__ == '__main__':
        HttpRequest().http_request()
    
    • 把刚才的代码直接封装成一个函数,但是无法进行不同的url、使用不同的data调用,所以将url、data、cookie等提取为通过参数传递

    • 可能不同的接口需要提取的响应内容也不一样,改为返回一个消息实体,需要什么内容,再提取什么内容,而不是固定的打印响应状态码、响应头、响应正文

    • 请求方式也不是固定post,也将它变为参数传递

    import requests
    class HttpRequest:
        '''
        利用request封装get请求和post请求
        '''
    
        def http_request(self,url,data,method,cookie=None):
            '''
            :param
            @url:请求的地址 http:ip:port/path
            @param:传递的参数 非必填参数 字典格式传递参数
            :return
            返回一个消息实体
            '''
            if method=="get":
                response = requests.get(url,data,cookie)
            else:
                response=requests.post(url,data,cookie)
            return response #函数的返回是一个消息实体
    
    # 测试
    if __name__ == '__main__':
        url = "http://v.juhe.cn/laohuangli/d"
        data = {"date": "2019-09-14", "key": "3078e34cb750268b324e6c982726d00f"}
        res=HttpRequest().http_request(url,data,"post")
        print("响应状态码:", res.status_code)
        print("响应头:", res.headers)
        print("响应正文:", res.json())
        print("请求头:",res.request.headers)
    
    

    相关文章

      网友评论

          本文标题:python基础之类与对象的request模块、代码封装

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