簡體   English   中英

Python:用suds發出請求

[英]Python: Making a request with suds

我正在測試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,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>
''')

<Class>CompanyDetails</Class>您獲得的信息類型。 有點什么“功能”來打電話

<Authentication>
<Method>CHMD5</Method>
<Value>e999e113407884fa410fa2f53bc23952</Value>
</Authentication>
</IDAuthentication>
<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

該站點沒有任何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()

輸出大量數據。

Suds並不容易發現這項服務,最好先用soapui測試一下,或者用xslt生成一個人類可讀的wsdl文檔: http//code.google.com/p/wsdl-viewer/ 因此,您了解請求和回復的結構以及可用的服務。

soap中的請求和響應是xml樹,所以一旦得到結果,你需要訪問包含你感興趣的信息的xml標簽的內容。這是一個應該有效的例子(我沒有用戶名,但結果.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

您無法針對.xsd提出請求。 XSD是交換消息的定義。 您必須針對Web服務提出請求。 在此處,您可以找到有關該Web服務的更多信息。 但也有定價頁面表明您必須付費才能使用他們的服務。 可能在您付款時,您將獲得用戶名和密碼以對服務進行身份驗證。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM