2

我是 XMLRPC 的新手,但我需要使用它(Python 2.7 中的 xmlrpclib)与接受 xml 文件的服务器(www.neos-server.org)进行通信。我在严格限制传出和传入流量的防火墙后面,但我能够使用 webproxy 浏览网页,几乎不受阻碍。

测试 1 和 2(如下)有效,但测试 3 导致 HTTP 502 错误(无法连接)

import urllib2
import xmlrpclib
import httplib

class ProxyTransport(xmlrpclib.Transport):
    def request(self, host, handler, request_body, verbose):

        self.verbose = verbose
        url = 'http://' + host + handler
        if self.verbose: "ProxyTransport URL: [%s]" % url

        request = urllib2.Request(url)
        request.add_data(request_body)
        request.add_header("User-Agent", self.user_agent)
        request.add_header("Content-Type", "text/xml")

        proxy_handler = urllib2.ProxyHandler({"http":"MYPROXY:8080"})
        opener = urllib2.build_opener(proxy_handler)

        f = opener.open(request)

        return(self.parse_response(f))

# TEST 1 - HTML fetching
def test1():
    html = urllib2.urlopen("http://www.google.com").read() # note no proxy setup here
    print html

# TEST 2 - XMLRPC sample server fetching
def test2():
    p = ProxyTransport()
    test_url = "http://betty.userland.com"
    #test_server = xmlrpclib.Server(test_url) # gives <ProtocolError for betty.userland.com/RPC2: 403 WebTrap>
    test_server = xmlrpclib.Server(test_url, transport=p) 

    test_api = "examples.getStateName(9)"
    print "API: %s" % test_api
    r = eval("test_server.%s" % test_api)
    print "Result: ", r

# TEST 3 - XMLRPC server (NEOS)
def test3():
    # Setup proxy and server
    p = ProxyTransport()
    NEOS_HOST = "www.neos-server.org"
    NEOS_PORT = 3332
    neos = xmlrpclib.Server("http://%s:%d" % (NEOS_HOST, NEOS_PORT), transport = p)

    # Talk
    print "Ping Neos..."    
    neos.ping()

test1()
test2()
test3()

我尝试了几种不同的解决方案(https://gist.github.com/nathforge/980961https://mail.python.org/pipermail/python-list/2006-July/367049.html)但他们没有似乎不起作用。我假设我需要能够 ping 才能发送/接收 xml 文件和结果。接下来我应该尝试什么?

4

0 回答 0