【问题标题】:Python: Making a request with sudsPython:使用 suds 发出请求
【发布时间】:2013-12-08 00:03:03
【问题描述】:

我正在测试 SUDS 库,我正在尝试向端点发出一个简单的请求,但我得到了不寻常的输出。为什么?

from suds.client import Client
import logging
logging.basicConfig(level=logging.INFO)
logging.getLogger('suds.xsd.schema').setLevel(logging.DEBUG)

url = "http://xmlgw.companieshouse.gov.uk/v1-0/xmlgw/Gateway"

client = Client(url)
print client

输出:

Martynass-MacBook-Air:CH martynas$ python ch.py
DEBUG:suds.xsd.schema:loaded:

schema collection
   Schema:0x109a7db90
   (raw)
      <schema/>
   (model)

DEBUG:suds.xsd.schema:MERGED:
Schema:0x109a7db90
(raw)
   <schema/>
(model)

【问题讨论】:

  • 您应该将问题改写为“我希望将 SUDS 与特定端点一起使用,但我不知道 WSDL”

标签: python soap suds


【解决方案1】:

您不能将 suds 用于此服务,suds 基于 SOAP,它是另一种 Web 服务协议。您可以做的是发送一个 xml 请求并获得响应。

import requests

target_url = "http://xmlgw.companieshouse.gov.uk/v1-0/xmlgw/Gateway"
headers={'Content-type': 'text/xml'}
print requests.post(target_url, data=xml, headers=headers).text

xml 是根据他们的方案定义的。 http://xmlgw.companieshouse.gov.uk/example_http.html 这是一个例子

xml = ('''
<GovTalkMessage xmlns="http://www.govtalk.gov.uk/schemas/govtalk/govtalkheader" 
xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" 
xmlns:gt="http://www.govtalk.gov.uk/schemas/govtalk/core" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.govtalk.gov.uk/schemas/govtalk/govtalkheader">
<EnvelopeVersion>1.0</EnvelopeVersion>
<Header>
<MessageDetails>
<Class>CompanyDetails</Class>
<Qualifier>request</Qualifier>
<TransactionID>14456553</TransactionID>
</MessageDetails>
<SenderDetails>
<IDAuthentication>
<SenderID>My_SenderID</SenderID>
<Authentication>
<Method>CHMD5</Method>
<Value>e999e113407884fa410fa2f53bc23952</Value>
</Authentication>
</IDAuthentication>
<EmailAddress>sometest@some.email.address</EmailAddress>
</SenderDetails>
</Header>
<GovTalkDetails>
<Keys/>
</GovTalkDetails>
<Body>
<CompanyDetailsRequest xmlns="http://xmlgw.companieshouse.gov.uk/v1-0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://xmlgw.companieshouse.gov.uk/v1-0/schema/CoDets.xsd">
<CompanyNumber>01002361</CompanyNumber>
<GiveMortTotals>1</GiveMortTotals>
</CompanyDetailsRequest>
</Body>
</GovTalkMessage>
''')

&lt;Class&gt;CompanyDetails&lt;/Class&gt;你得到什么类型的信息。有点什么“功能”来调用

<Authentication>
<Method>CHMD5</Method>
<Value>e999e113407884fa410fa2f53bc23952</Value>
</Authentication>
</IDAuthentication>
我猜你会在这里输入登录信息

<CompanyDetailsRequest xmlns="http://xmlgw.companieshouse.gov.uk/v1-0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlgw.companieshouse.gov.uk/v1-0/schema/CoDets.xsd"> <CompanyNumber>01002361</CompanyNumber> <GiveMortTotals>1</GiveMortTotals> </CompanyDetailsRequest> “函数”调用及其参数

现在这会给我一个回复,告诉我授权失败。因此,如果您在那里有一个帐户,这应该适合您。

您可以在此处找到针对不同类型请求的方案列表。他们中的一些人有样品要求来帮助你。 http://xmlgw.companieshouse.gov.uk/v1-0/xmlgw/SchemaStatusOutput

这是他们所有计划的完整指南。 http://xmlgw.companieshouse.gov.uk/data_usage_guide_dec_2013.pdf

【讨论】:

  • 我认为这只是为了信息检索?你真的可以用这个提交东西吗?
  • 我想是的。但据我所见,这看起来像是一个信息检索站点。但是查询时必须提交参数,所以提交信息的方式应该是一样的。
【解决方案2】:

该站点没有任何 wsdl 定义。尝试类似的东西 http://wsf.cdyne.com/WeatherWS/Weather.asmx?WSDL 为您的网址 然后你可以尝试类似的东西 client.service.GetWeatherInformation()

从 suds 文档中,“您需要知道所使用的每个服务的 WSDL 的 url。”

一个明确的例子

from suds.client import Client
import logging
logging.basicConfig(level=logging.INFO)
logging.getLogger('suds.xsd.schema').setLevel(logging.DEBUG)

url = " http://wsf.cdyne.com/WeatherWS/Weather.asmx?WSDL"

client = Client(url)
client.service.GetWeatherInformation()

输出大量数据。

【讨论】:

【解决方案3】:

Suds 不容易发现服务,最好先用soapui 测试一下,或者用这个xslt 生成一个人类可读的wsdl 文档:http://code.google.com/p/wsdl-viewer/。这样您就知道请求和回复的结构,以及可用的服务。

soap 中的请求和响应是 xml 树,因此一旦获得结果,您需要访问包含您感兴趣的信息的 xml 标记的内容。这是一个应该可以工作的示例(我不知道) t 有用户名,但 result.Status.Success 有效)。

import suds

client = suds.client.Client("http://webservices.data-8.co.uk/companieshouse.asmx?WSDL")
result = client.service.GetCompanyDetails("username", "password", 1234)
print result.Status.Success
print result.Result.CompanyName

【讨论】:

    【解决方案4】:

    您不能对 .xsd 提出请求。 XSD 是交换消息的定义。您必须针对 web 服务提出请求查看 here 您可以找到有关该 web 服务的更多信息。但也有定价页面表明您必须付费才能使用他们的服务。可能当您付款时,您将获得用户名和密码以通过服务进行身份验证。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-28
    相关资源
    最近更新 更多