python3 使用Fiddler捕获的Raw信息带cookie使用GET或POST获取
import requests from retrying import retry def is_request_exception(e): print(e) return True getcookie='''GET http://www.xxx.com HTTP/1.1 User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 Accept-Encoding: gzip, deflate Connection: keep-alive Cookie: ASP.NET_SessionId=zempp5fkn3tdwzdee0jl3lvx Upgrade-Insecure-Requests: 1 ''' @retry(retry_on_exception=is_request_exception,wait_random_min=2000, wait_random_max=10000) def getWithFiddlerGetCookie(getcookie,visiturl): lines = [i.strip() for i in getcookie.split("\n")] #fiddler request Raw 的起始行为完整 (method, url, _) = lines[0].split() if method == 'POST': body = lines[-1] lines = lines[1:-2]#POSt则lines[-2]为''(空行), lines[-1]为body else: lines = lines[1:-2]#GET则lines[-1]为''(空行) headers = {} for line in lines: k, v = line.split(': ',1) headers[k] = v if method == 'POST': r = requests.post(visiturl, headers=headers, data=body, verify=False,timeout=30) else: r = requests.get(visiturl, headers=headers, verify=False,timeout=30) return r postcookie='''POST http://www.xxx.com HTTP/1.1 User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0 Accept: application/json, text/javascript, */*; q=0.01 Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 Accept-Encoding: gzip, deflate Content-Type: application/x-www-form-urlencoded; charset=UTF-8 X-Requested-With: XMLHttpRequest Content-Length: 38 Connection: keep-alive Cookie: ASP.NET_SessionId=zempp5fkn3tdwzdee0jl3lvx body=00001''' @retry(retry_on_exception=is_request_exception,wait_random_min=2000, wait_random_max=10000) def getWithFiddlerPostCookie(postcookie,visiturl,Referer,body): lines = [i.strip() for i in postcookie.split("\n")] (method, url, _) = lines[0].split() if method == 'POST': #body = lines[-1] #数据由程序传递 lines = lines[1:-2]#POSt则lines[-2]为'', lines[-1]为body else: lines = lines[1:-2]#GET则lines[-1]为'' headers = {} for line in lines: k, v = line.split(': ',1) #:注意后面有空格 headers[k] = v headers['Referer']=Referer #requests 自动处理3xx if method == 'POST': r = requests.post(visiturl, headers=headers, data=body, verify=False,timeout=30) else: r = requests.get(visiturl, headers=headers, verify=False, timeout=30) return r
其实两个函数的主体都是一样的。只是根据参数略加修改。