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
Python發送http請求工具類
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.