Python 无法分析HTTPConnection.debuglevel的输出

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

我试图对tcp流的输出进行可编程性检查。我可以通过在HTTPConnection中打开debug来获得tcp流的结果,但是如何读取数据并使用正则表达式对其求值呢。我一直得到TypeError:预期的字符串或缓冲区。有没有办法将结果转换为字符串? 谢谢

脚本:

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和响应?谢谢你,约翰