requesocks:模拟会话对象的get()方法

2024-05-02 15:35:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用Python包requesocks而不是{},因为它支持使用SOCKS代理。在

我试图使用Python内置的模拟库模拟session对象的get()方法,但无法模拟状态代码:

import mock 
import requesocks

class WebScraper:
    def get_content(self, url, proxy):
        session = requesocks.session()
        session.proxies = proxy
        response = session.get(url)
        return response.status_code 

def main():
    session = requesocks.session()
    session.get = mock.MagicMock(return_value={'status_code': 400})

    scraper = WebScraper()
    proxy = {'http': 'socks5://localhost:1080'}
    status_code = scraper.get_content('http://www.purple.com', proxy)
    print "Status Code: ", status_code 

if __name__ == "__main__":
    main()

在下面的示例中,运行结果是人为的:

^{pr2}$

正确的方法是什么来模拟它,以便我得到一个状态代码400?在

另外,是否有类似的模仿库,比如requests-mockfor requesocks?在


Tags: 方法代码importgetmainsession状态def
1条回答
网友
1楼 · 发布于 2024-05-02 15:35:47

我通过调整this answer中的解决方案使其正常工作。希望这可以帮助其他人,下面是我更新的代码:

import mock 
import requesocks

class WebScraper:
    def get_content(self, url, proxy):
        session = requesocks.session()
        session.proxies = proxy
        response = session.get(url)
        return response.status_code 

@mock.patch('requesocks.session')
def main(mock_class):
    instance = mock_class.return_value 
    type(instance.get.return_value).status_code = mock.PropertyMock(return_value=400)

    scraper = WebScraper()
    proxy = {'http': 'socks5://localhost:1080'}
    status_code = scraper.get_content('http://www.purple.com', proxy)
    print "Status Code: ", status_code 

if __name__ == "__main__":
    main()

这将产生所需的输出:

^{pr2}$

相关问题 更多 >