获取 [Errno 111] 连接被拒绝时如何使用 Python 代理服务器

How to use Python proxy server when getting [Errno 111] Connection refuse

我尝试在 pythonanywhere 上测试 Odoo Web Service API from Python and everything works fine from localhost using a basic Django app and xmlrpclib. But when I host it 我得到一个 [Errno 111] 连接被拒绝 错误:

在他们的帮助页面 they describe 上,免费帐户的端口已关闭,必须使用 proxy.server:3128 的 HTTP 代理。怎么做?

实际上,一旦将 .odoo.com 添加到他们的 whitelist,它应该在没有代理的情况下工作,但代理问题对我来说也很有趣如何 运行 此应用程序在不同的主机上。

这是我的视图的 Django 代码(是的,我知道将 html 放在视图中是不好的做法,仅用于测试):

from django.http import HttpResponse
import xmlrpclib

url = "https://demo3.odoo.com"
db = "demo_100_1489044950"
username = "admin"
password = "admin"

#odoo service connection
common = xmlrpclib.ServerProxy('{}/xmlrpc/2/common'.format(url))
uid = common.authenticate(db, username, password, {})
models = xmlrpclib.ServerProxy('{}/xmlrpc/2/object'.format(url))
products = models.execute_kw(db, uid, password,
    'product.template', 'search_read',
    [[]],
    {'fields': ['name', 'list_price'], 'limit': 10})

for product in products:
    print product['id'], product['name'], product['list_price']

def index(request):
    html = "<html><body><h1>Odoo Products</h1>"
    for product in products:
        name = product['name'].encode("utf-8", "strict")
        html += "<div>"+name+": "+str(product['list_price'])+"</div>"
    html += "</body></html>"
    return HttpResponse(html)

ps: Django 应用程序的源代码在 this github repository

This blog post 解释了如何创建代理感知的 xmlrpclib.ServerProxy 的子类,这应该可以正常工作。 (注意:它对我来说看起来完全正确,但我自己还没有尝试过。)