سؤال

كيف يمكنني مشاهدة الرسائل التي يتم إرسالها مرة أخرى وعلى طلبات Urllib Shttp؟ إذا كانت http، فسوف أشاهد حركة مرور المقبس ولكن بالطبع لن يعمل من أجل HTTPS. هل هناك علم تصحيح يمكنني تعيين ذلك سيفعل هذا؟

import urllib
params = urllib.urlencode({'spam': 1, 'eggs': 2, 'bacon': 0})
f = urllib.urlopen("https://example.com/cgi-bin/query", params)
هل كانت مفيدة؟

المحلول

لا، لا يوجد علم تصحيح لمشاهدة هذا.

يمكنك استخدام مصحح الأخطاء المفضل لديك. هذا هو الأسهل الخيار. فقط أضف نقطة توقف في وظيفة Urlopen وأنت انتهيت.

سيكون هناك خيار آخر هو كتابة وظيفة التنزيل الخاصة بك:

def graburl(url, **params):
    print "LOG: Going to %s with %r" % (url, params)
    params = urllib.urlencode(params)
    return urllib.urlopen(url, params)

واستخدامها مثل هذا:

f = graburl("https://example.com/cgi-bin/query", spam=1, eggs=2, bacon=0)

نصائح أخرى

يمكنك دائما أن تفعل القليل من المسوك

import httplib

# override the HTTPS request class

class DebugHTTPS(httplib.HTTPS):
    real_putheader = httplib.HTTPS.putheader
    def putheader(self, *args, **kwargs):
        print 'putheader(%s,%s)' % (args, kwargs)
        result = self.real_putheader(self, *args, **kwargs)
        return result

httplib.HTTPS = DebugHTTPS



# set a new default urlopener

import urllib

class DebugOpener(urllib.FancyURLopener):
    def open(self, *args, **kwargs):
        result = urllib.FancyURLopener.open(self, *args, **kwargs)
        print 'response:'
        print result.headers
        return result

urllib._urlopener = DebugOpener()


params = urllib.urlencode({'spam': 1, 'eggs': 2, 'bacon': 0}) 
f = urllib.urlopen("https://www.google.com/", params)

يعطي الناتج

putheader(('Content-Type', 'application/x-www-form-urlencoded'),{})
putheader(('Content-Length', '21'),{})
putheader(('Host', 'www.google.com'),{})
putheader(('User-Agent', 'Python-urllib/1.17'),{})
response:
Content-Type: text/html; charset=UTF-8
Content-Length: 1363
Date: Sun, 09 Aug 2009 12:49:59 GMT
Server: GFE/2.0
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top