Python發送http請求工具類

import httptest
import json
import ssl
from urllib import request, parse
from httptest.loggerutil import Logger

logger = Logger(logger='HttpRequestUtil').getlog()
#Python 2.7.9 之後引入了一個新特性
#當你urllib.urlopen一個 https 的時候會驗證一次 SSL 證書
ssl._create_default_https_context = ssl._create_unverified_context


class HttpRequestUtil:
    def __init__(self):
        self.url = ''
        self.params = ''
        self.type = 'post'
        # 默認post請求
        self.header = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko'}
        # 默認請求頭
        self.addheader = ''
        self.run_res = ''
        self.cookies = []

    def set_url(self, url):
        self.url = url
        return self

    def set_params(self, params):
        self.params = params
        return self

    def set_header(self, addheader):
        self.addheader = addheader
        return self

    def set_type(self, type):
        self.type = type
        return self

    def append_header(self, req):
        """將頭信息追加到request請求頭部"""
        for fie_id in self.addheader:
            req.add_header(fie_id, self.addheader[fie_id])
        return self

    def http_get(self):
        print("url:" + str(self.url))
        print("params:"+str(self.params))
        if not self.url:
            raise Exception('url must not empty !')
        # 參數拼接
        params = parse.urlencode(self.params).encode(encoding='utf-8')
        # print(params)
        req = request.Request(url='%s%s%s' % (self.url, '?', params), headers=self.header)
        self.append_header(req)
        return self.http_send(req)

    def http_post(self):
        logger.info("發送post請求")
        logger.info("url:" + str(self.url))
        logger.info("params:"+str(self.params))
        if not self.url:
            raise Exception('url must not empty !')
        # 普通數據使用
        params = parse.urlencode(self.params).encode(encoding='utf-8')
        req = request.Request(url=self.url, data=params, headers=self.header)
        self.append_header(req)
        return self.http_send(req)

    def http_post_json(self):
        logger.info("發送get請求")
        logger.info("url:" + str(self.url))
        logger.info("params:"+str(self.params))
        if not self.url:
            raise Exception('url must not empty !')
        # json串數據
        params = json.dumps(self.params).encode(encoding='utf-8')
        req = request.Request(url=self.url, data=params, headers=self.header)
        self.set_header({"Content-Type": "application/json"})
        self.append_header(req)
        return self.http_send(req)

    def http_cookie_manager(self, req):
        # 創建cookie處理器
        cj = httptest.cookiejar.CookieJar()
        opener = req.build_opener(req.HTTPCookieProcessor(cj), req.HTTPHandler)
        req.install_opener(opener)
        return self

    def http_send(self, req):
        try:
            res = request.urlopen(req)
            self.cookies = res.getheader('Set-Cookie')
            self.run_res = res.status
            # print(self.cookies)
            # print(self.run_res)
            resb = res.read()
            result = resb.decode(encoding='utf-8')
            # result = json.loads(resb)
        except ZeroDivisionError as e:
            result = e
        logger.info("result:" + result)
        return result

    def get_response_status(self):
        return self.run_res
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章