from urllib import request, parse from urllib.error import HTTPError, URLError from http import cookiejar # 创建session类,调用前实例化 class session(object): def __init__(self): # 通过对象保存cookie cookie_object = cookiejar.CookieJar() # 创建handler,handler对应一个操作 handler = request.HTTPCookieProcessor(cookie_object) # 创建opener,调用handler内部函数,存储到cookie_object self.opener = request.build_opener(handler) def get(self,url, headers=None): return get(url, headers,self.opener) def post(self,url, form, headers=None): return post(url, form, headers,self.opener) def get(url, headers=None,opener = None): return urlrequests(url, headers=headers,opener=opener) def post(url, form, headers=None,opener = None): return urlrequests(url, form, headers=headers,opener=opener) #b. post(url, form, headers=None) #1. 传入url #2. user_agent #3. headers #4. 定义Request #5. urlopen #6. 返回byte数组 def urlrequests(url, form=None, headers=None,opener=None): user_agent = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36' # 如果用户需要自行传入headers, 则覆盖之前的headers if headers == None: headers = { 'User-Agent': user_agent } # 创建一个空的html_bytes,如try出错后,return html_bytes,程序不会崩溃 html_bytes = b'' try: if form: # POST # 2.1 转换成str form_str = parse.urlencode(form) #print(form_str) # 2.2 转换成bytes form_bytes = form_str.encode('utf-8') # 构建请求对象头 req = request.Request(url, data=form_bytes, headers=headers) # 简写 # req = request.Request(url,data=bytes(data_str,encoding='utf-8')) else: # GET # 构建请求对象头 req = request.Request(url, headers=headers) # 如果有cookie,构建请求对象头用opener.open if opener: response=opener.open(req) else: # 反之用request response = request.urlopen(req) html_bytes = response.read() # 服务器错误连接失败 except HTTPError as e: print(e) # 连接超时 except URLError as e: print(e) return html_bytes # 测试代码,如果此文件被掉包执行则以下代码不被执行 if __name__ == '__main__': url = 'http://fanyi.baidu.com/sug' while True: ke = input('请输入要翻译的词语:') form = { 'kw': ke } html_bytes = post(url, form=form) print(html_bytes) # url = 'http://www.baidu.com' # html_byte = get(url) # print(html_byte)
封装(包含cookie)(from tuozhan_all import session)
猜你喜欢
转载自blog.csdn.net/q810935819/article/details/81676143
今日推荐
周排行