擅长:python、mysql、java
<p>最好是编写一个模拟urlopen(可能还有请求),它提供了与urllib2的版本类似的最低要求的接口。然后,您需要让使用它的函数/方法以某种方式接受这个模拟urlopen,并使用<code>urllib2.urlopen</code>否则。</p>
<p>这是相当多的工作,但值得。请记住,python对ducktyping非常友好,所以您只需要提供响应对象属性的一些外观来模拟它。</p>
<p>例如:</p>
<pre><code>class MockResponse(object):
def __init__(self, resp_data, code=200, msg='OK'):
self.resp_data = resp_data
self.code = code
self.msg = msg
self.headers = {'content-type': 'text/xml; charset=utf-8'}
def read(self):
return self.resp_data
def getcode(self):
return self.code
# Define other members and properties you want
def mock_urlopen(request):
return MockResponse(r'<xml document>')
</code></pre>
<p>当然,其中一些很难模拟,因为例如,我相信普通的“headers”是一个HTTPMessage,它实现了一些有趣的东西,比如不区分大小写的头名称。但是,您可以使用响应数据简单地构造HTTPMessage。</p>