Python 无法分析HTTPConnection.debuglevel的输出
我试图对tcp流的输出进行可编程性检查。我可以通过在HTTPConnection中打开debug来获得tcp流的结果,但是如何读取数据并使用正则表达式对其求值呢。我一直得到TypeError:预期的字符串或缓冲区。有没有办法将结果转换为字符串? 谢谢 脚本:Python 无法分析HTTPConnection.debuglevel的输出,python,Python,我试图对tcp流的输出进行可编程性检查。我可以通过在HTTPConnection中打开debug来获得tcp流的结果,但是如何读取数据并使用正则表达式对其求值呢。我一直得到TypeError:预期的字符串或缓冲区。有没有办法将结果转换为字符串? 谢谢 脚本: from urllib2 import Request, urlopen, URLError, HTTPError import urllib2 import cookielib import httplib import re http
from urllib2 import Request, urlopen, URLError, HTTPError
import urllib2
import cookielib
import httplib
import re
httplib.HTTPConnection.debuglevel = 1
p = re.compile('abc=..........')
cj = cookielib.CookieJar()
proxy_address = '192.168.232.134:8083' # change the IP:PORT, this one is for example
proxy_handler = urllib2.ProxyHandler({'http': proxy_address})
opener = urllib2.build_opener(proxy_handler, urllib2.HTTPCookieProcessor(cj), urllib2.HTTPHandler(debuglevel=1))
urllib2.install_opener(opener)
url = "http://www.google.com/" # change the url
req=urllib2.Request(url)
data=urllib2.urlopen(req)
m=p.match(data)
if m:
print "Match found."
else:
print "Match not found."
结果:
send: 'GET hyperlink/ HTTP/1.1\r\nAccept-Encoding: identity\r\nHost: www.google.com\r\nConnection: close\r\nUser-Agent: Python-urllib/2.6\r\n\r\n'
reply: 'HTTP/1.1 303 See Other\r\n'
header: Location: hyperlink:8083/3240951276
header: Set-Cookie: abc=3240951276; path=/; domain=.google.com; expires=Thu, 31-Dec-2020 23:59:59 GMT
header: Content-Length: 0
send: 'GET hyperlink/3240951276 HTTP/1.1\r\nAccept-Encoding: identity\r\nHost: hyperlink\r\nConnection: close\r\nUser-Agent: Python-urllib/2.6\r\n\r\n'
reply: 'HTTP/1.1 303 See Other\r\n'
header: Location: hyperlink
header: Set-Cookie: abc=3240951276; path=/; expires=Thu, 31-Dec-2020 23:59:59 GMT
header: Content-Length: 0
send: 'GET http://www.google.com/ HTTP/1.1\r\nAccept-Encoding: identity\r\nHost: www.google.com\r\nCookie: abc=3240951276\r\nConnection: close\r\nUser-Agent: Python-urllib/2.6\r\n\r\n'
reply: 'HTTP/1.1 200 OK\r\n'
header: Date: Mon, 18 Oct 2010 21:09:32 GMT
header: Expires: -1
header: cache-control: max-age=0, private, private
header: Content-Type: text/html; charset=ISO-8859-1
header: Set-Cookie: PREF=ID=066bc785a2b15ef6:FF=0:TM=1287436172:LM=1287436172:S=mNiXaRhshpf8nLji; expires=Wed, 17-Oct-2012 21:09:32 GMT; path=/; domain=.google.com
header: Set-Cookie: NID=39=ur3gnXL80kEy4shKAh8_-XV8PhmS4G83slPcX9OD3L6uthQZw-wq7RUnB0WKGYR3F_QGoyZAyEPCvjdi69EXXq23dzvpuZSl_KU2o7pqcTB7Vym4co1LOXmi9YQGpbkb; expires=Tue, 19-Apr-2011 21:09:32 GMT; path=/; domain=.google.com; HttpOnly
header: Server: gws
header: X-XSS-Protection: 1; mode=block
header: Connection: close
header: Content-Length: 4676
header: X-Con-Reuse: 1
header: Content-Encoding: gzip
header: via: 1.1 HermesPrefetch (CID2627003316.AID3240951276.TID1)
header: X-Trace-Timing: Start=1287436172845, Sched=0, Dns=2, Con=11, RxS=28, RxD=35
Traceback (most recent call last):
File "C:\Documents and Settings\asdf\workspace\PythonScripts2\src\Test1.py", line 18, in <module>
m=p.match(data)
TypeError: expected string or buffer
httplib提供给您的调试信息(您在终端中看到的)实际上不是urllib2.urlopen返回的对象的一部分。相反,它直接打印到进程的sys.stdout。不幸的是,在httplib中无法改变这种行为。我并不完全清楚,通过捕获此输出并在其上运行正则表达式,您想要实现什么,但如果这确实是您想要做的,您需要用其他东西替换sys.stdout,例如合适的StringIO对象,并以某种方式查看您关心的输出是哪个输出
但是,请记住,httplib在其调试输出中生成的所有信息都可以直接在程序中使用。它要么基于通过urllib2传递给httplib的内容,要么是服务器响应的一部分,因此在urllib2.urlopen返回的对象中可用。例如,看起来您正试图提取cookie信息,只需从您已经提供的CookieJar中获取cookie即可。似乎没有任何合理的理由尝试捕获输出并对其进行解析。嗨,托马斯,谢谢你的回复。这很有帮助。我想关注tcp对话的原因是,我有一个客户端位于Web服务器和浏览器之间,充当代理,我想读取响应并跟踪它生成的重定向。有更好的方法吗?在我看来,在检查cookie jar时得到的cookie是web服务器的响应cookie。如何通过编程获得中间cookie和响应?谢谢你,约翰