Hi, all:

These days I have been doing something about python webservice. Suds, as a client-end, it's good.

Now, ask a question I encounter with about suds:


When I try to invoke a remote method getWeather() in the url "http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl", it failed. My code and the exception returned are as follows:

# filename: suds.py
import suds
def test_weather():
    from suds.xsd.doctor import ImportDoctor, Import
    imp = Import('http://www.w3.org/2001/XMLSchema')
    d = ImportDoctor(imp)

    url = "http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl"
    client = suds.client.Client(url,doctor=d,cache=None,xstq=False,faults=False)
    print 'client', client
    a =  10.0
    b = 3.0
    #output1 = client.service.getRegionCountry()
    output = client.service.getWeather(100)
    print 'weatherv', output

# output:

Traceback (most recent call last):
  File "suds_client.py", line 787, in <module>
    test_weather()
  File "suds_client.py", line 739, in test_weather
    client = suds.client.Client(url,doctor=d,cache=None,xstq=False,faults=False)
  File "/usr/local/lib/python2.6/dist-packages/suds-0.3.7-py2.6.egg/suds/client.py", line 109, in __init__
    self.wsdl = Definitions(url, options)
  File "/usr/local/lib/python2.6/dist-packages/suds-0.3.7-py2.6.egg/suds/wsdl.py", line 194, in __init__
    self.build_schema()
  File "/usr/local/lib/python2.6/dist-packages/suds-0.3.7-py2.6.egg/suds/wsdl.py", line 255, in build_schema
    self.schema = container.load()
  File "/usr/local/lib/python2.6/dist-packages/suds-0.3.7-py2.6.egg/suds/xsd/schema.py", line 90, in load
    child.open_imports()
  File "/usr/local/lib/python2.6/dist-packages/suds-0.3.7-py2.6.egg/suds/xsd/schema.py", line 277, in open_imports
    imported = imp.open()
  File "/usr/local/lib/python2.6/dist-packages/suds-0.3.7-py2.6.egg/suds/xsd/sxbasic.py", line 608, in open
    result = self.download()
  File "/usr/local/lib/python2.6/dist-packages/suds-0.3.7-py2.6.egg/suds/xsd/sxbasic.py", line 628, in download
    return self.schema.instance(root, url)
  File "/usr/local/lib/python2.6/dist-packages/suds-0.3.7-py2.6.egg/suds/xsd/schema.py", line 367, in instance
    return Schema(root, baseurl, self.options)
  File "/usr/local/lib/python2.6/dist-packages/suds-0.3.7-py2.6.egg/suds/xsd/schema.py", line 200, in __init__
    self.open_imports()
  File "/usr/local/lib/python2.6/dist-packages/suds-0.3.7-py2.6.egg/suds/xsd/schema.py", line 277, in open_imports
    imported = imp.open()
  File "/usr/local/lib/python2.6/dist-packages/suds-0.3.7-py2.6.egg/suds/xsd/sxbasic.py", line 608, in open
    result = self.download()
  File "/usr/local/lib/python2.6/dist-packages/suds-0.3.7-py2.6.egg/suds/xsd/sxbasic.py", line 626, in download
    root = Parser(transport).parse(url=url).root()
  File "/usr/local/lib/python2.6/dist-packages/suds-0.3.7-py2.6.egg/suds/sax/parser.py", line 133, in parse
    fp = self.transport.open(Request(url))
  File "/usr/local/lib/python2.6/dist-packages/suds-0.3.7-py2.6.egg/suds/transport/https.py", line 69, in open
    return  HttpTransport.open(self, request)
  File "/usr/local/lib/python2.6/dist-packages/suds-0.3.7-py2.6.egg/suds/transport/http.py", line 69, in open
    fp = self.__open(u2request)
  File "/usr/local/lib/python2.6/dist-packages/suds-0.3.7-py2.6.egg/suds/transport/http.py", line 107, in __open
    return self.urlopener.open(u2request)
  File "/usr/lib/python2.6/urllib2.py", line 391, in open
    response = self._open(req, data)
  File "/usr/lib/python2.6/urllib2.py", line 409, in _open
    '_open', req)
 File "/usr/lib/python2.6/urllib2.py", line 369, in _call_chain
    result = func(*args)
  File "/usr/lib/python2.6/urllib2.py", line 1161, in http_open
    return self.do_open(httplib.HTTPConnection, req)
  File "/usr/lib/python2.6/urllib2.py", line 1134, in do_open
    r = h.getresponse()
  File "/usr/lib/python2.6/httplib.py", line 986, in getresponse
    response.begin()
  File "/usr/lib/python2.6/httplib.py", line 391, in begin
    version, status, reason = self._read_status()
  File "/usr/lib/python2.6/httplib.py", line 355, in _read_status
    raise BadStatusLine(line)

#NOTE: 
1: the url "http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl" is avaliable, you can click it and see the wsdl.
2: the url is provided  by a corporation in China, in another page (http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx?op=getWeather), put a number in the field “theCityCode” and click the butter , you can get a xml file has contains the results. Anyone can have a try!

I like suds and believe it's strong and stable enough. Hope someone can tell me what's the reason it throw exception?
-- Jia Xiaolei