我们经常会用python来进行抓包,模拟登陆等等, 势必要构造http请求包。
http的request通常有4个方法get,post,put,delete,分别对应于查询,更新,添加,删除。我们经常用到的也就get,post。
1.用python构造get
#build request for accessed url homeReq = urllib.request.Request( url = csdnAccessModuleUrl ) homeReq.add_header('Accept', 'text/html, application/xhtml+xml, */*'); homeReq.add_header('Accept-Language', 'en-US') homeReq.add_header('Accept-Encoding', 'gzip, deflate') homeReq.add_header('Connection', 'Keep-Alive'); homeReq.add_header('Referer', 'http://passport.csdn.net/account/login?from='+urllib.parse.quote(moduleUrl))#http%3a%2f%2fwrite.blog.csdn.net%2f') homeReq.add_header('User-Agent', 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)'); #open access url resp = urllib.request.urlopen(homeReq)
2.用python构造post
#build request for login url #post data postdata = { 'u':username, 'p':password, 'remember':'1', 't':'log', 'f':urllib.parse.quote(moduleUrl), } postdata = urllib.parse.urlencode(postdata).encode('utf-8') print(postdata) req = urllib.request.Request( url = csdnLoginUrl, data = postdata) req.add_header('Accept', 'text/html, application/xhtml+xml, */*'); req.add_header('Accept-Language', 'en-US') req.add_header('Accept-Encoding', 'gzip, deflate') req.add_header('Connection', 'Keep-Alive'); req.add_header('Referer', csdnAccessModuleUrl) req.add_header('User-Agent', 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)'); #open login url r = urllib.request.urlopen(req)
通过上面2个例子我们可以发现, 当Request的postdata赋值时,则为post方法,默认为get。