Dieser Beitrag ist Teil meiner Sourcecode a Day-Aktion.
Heute gibt’s eine simple Wrapper-Klasse für urllib aus Python3:
# -*- coding: utf-8 -*- #------------------------------------------------------------------------------- # Name: NetConnector # Purpose: Python urllib wrapper # # Author: Alexander Thiemann # # Created: 10.10.2011 # Copyright: (c) Alexander Thiemann 2011 #------------------------------------------------------------------------------- import urllib.request, urllib.parse, urllib.error import http.cookiejar import time, sys class NetConnector: def __init__(self, encoding='utf-8'): self.userAgent = 'Mozilla/5.0 (X11; U; Linux i686; de; rv:1.9) Gecko/2008060309 Firefox/3.0' self.encoding = encoding self.cookiejar = http.cookiejar.CookieJar() self.opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(self.cookiejar)) urllib.request.install_opener(self.opener) self.opener.addheaders = [('User-agent', self.userAgent)] def request(self, url, params={}, noencode=False, internalCount=1): print("URL: " + url); data = "" try: if len(params) != 0: if noencode: req = params["query"].encode(self.encoding) else: req = urllib.parse.urlencode(params).encode(self.encoding) print("Params: " + str(req)) sock = self.opener.open(url, req) else: sock = self.opener.open(url) data = sock.read().decode(self.encoding) sock.close() except urllib.error.HTTPError as e: print("HTTP Error: " + str(e.code)) except urllib.error.URLError as e: print(e) if internalCount >= 2: # edit this! print("[error] connection error. returning ''"); return "" print("[error] connection error. Sleeping " + str(internalCount) + " seconds.") time.sleep(internalCount) data = self.request(url, params, noencode, internalCount+1) return data
Verwendung:
connector = NetConnector(); connector.request("http://google.de") # get-request, returns response connector.request("http://google.de", {'a': 'asdasd'}) # post-request, returns response
Das ganze codiert automatisch Post-Parameter und verwaltet Cookies 🙂