1

このコードを使用して、wsdl からデータを取得しようとしています。

zipid(「60630」)のWebサイトのクエリは正常に機能しますが、私のコードでは次のようなエラーが発生します

「無効な郵便番号」

wsdlFile = 'http://wsf.cdyne.com/WeatherWS/Weather.asmx?wsdl'
wsdlObject = WSDL.Proxy(wsdlFile)
wsdlObject.show_methods()
zipid = "60630"
result = wsdlObject.GetCityWeatherByZIP(ZIP=zipid)
print result[1]

ここで何が問題なのか、コードが正しく機能しない理由を教えてください。

ありがとう !!!

4

1 に答える 1

0

問題はおそらく、クライアントがサーバーが理解できない要求を送信することです。あなたが使用しているようですSOAPpy、それは私がそれを試したときにそれが送信するリクエストです:

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
  SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
  xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
  xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
  xmlns:xsd="http://www.w3.org/1999/XMLSchema"
>
<SOAP-ENV:Body>
<GetCityWeatherByZIP SOAP-ENC:root="1">
<v1 xsi:type="xsd:string">60630</v1>
</GetCityWeatherByZIP>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

使用する場合は、以下を考慮してsudsください。

from suds.client import Client
cli = Client("http://wsf.cdyne.com/WeatherWS/Weather.asmx?wsdl")
cli.service.GetCityWeatherByZIP(ZIP=60630)

それは生成します:

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:ns0="http://ws.cdyne.com/WeatherWS/"
    xmlns:ns1="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
  <SOAP-ENV:Header/>
  <ns1:Body>
    <ns0:GetCityWeatherByZIP>
      <ns0:ZIP>60630</ns0:ZIP>
    </ns0:GetCityWeatherByZIP>
  </ns1:Body>
</SOAP-ENV:Envelope>

(wiresharkを使用してキャプチャ)

2番目のリクエストは、サーバーから有効な結果を返します。

これを修正する方法を提案するのに十分なSOAPpyを知りませんが、クライアントライブラリをsudsに切り替えることを検討できます。

于 2012-12-11T23:02:18.780 に答える