当前位置: 首页 > 面试题库 >

使用Python请求发送SOAP请求

周和志
2023-03-14
问题内容

是否可以使用Python的requests库发送SOAP请求?


问题答案:

确实有可能。

这是一个使用普通请求lib调用Weather SOAP Service的示例:

import requests
url="http://wsf.cdyne.com/WeatherWS/Weather.asmx?WSDL"
#headers = {'content-type': 'application/soap+xml'}
headers = {'content-type': 'text/xml'}
body = """<?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:GetWeatherInformation/></ns1:Body>
         </SOAP-ENV:Envelope>"""

response = requests.post(url,data=body,headers=headers)
print response.content

一些注意事项:

  • 标头很重要。没有正确的标头,大多数SOAP请求将无法工作。application/soap+xml可能是更 正确 使用的标头(但weatherservice更喜欢text/xml
  • 这将以xml字符串形式返回响应-然后,您需要解析该xml。
  • 为简单起见,我以纯文本形式包含了该请求。但是最佳实践是将其存储为模板,然后您可以使用jinja2加载它(例如),并传递变量

例如:

from jinja2 import Environment, PackageLoader
env = Environment(loader=PackageLoader('myapp', 'templates'))
template = env.get_template('soaprequests/WeatherSericeRequest.xml')
body = template.render()

有人提到了肥皂水库。Suds可能是与SOAP交互的更 正确的
方式,但是我经常发现,当您的WDSL格式不正确时,它会有些恐慌(当您与一家仍与之打交道的机构打交道时,TBH的可能性更大使用SOAP;))。

您可以像这样用肥皂水做上面的事情:

from suds.client import Client
url="http://wsf.cdyne.com/WeatherWS/Weather.asmx?WSDL"
client = Client(url)
print client ## shows the details of this service

result = client.service.GetWeatherInformation() 
print result

注意:
使用泡沫时,您几乎总是需要使用医生!

最后,调试SOAP有一些好处。TCPdump是您的朋友。在Mac上,您可以像这样运行TCPdump:

sudo tcpdump -As 0

这有助于检查实际通过网络的请求。

以上两个代码段也可以作为要点提供:

  • 带有请求的SOAP请求
  • 带肥皂水的SOAP请求


 类似资料:
  • 问题内容: 我正在尝试向SOAP Web服务发送请求。我阅读了本教程并准备了以下代码。但是,我将向多个SOAP Web服务发送不同的请求,而本教程只关注一个请求。如何使用发送SOAP请求? WebServiceTemplate 问题答案: 您可以使用以下代码,而无需在xml文件中定义任何内容。

  • 我从来没有用过肥皂。我搜索了一下,找到了一些例子。 我的目标是发送这样的肥皂请求 有人能告诉我如何发送这样的肥皂请求吗?或者给我一个例子或教程来发送这样的肥皂。谢谢大家。

  • 问题内容: 我是Web服务的新手,正在尝试使用python脚本发送以下基于JSON的请求: 如果我将以上内容粘贴到浏览器中,它将按预期工作。但是,我正在努力从Python发送请求。以下是我正在尝试的: 如何将apikey数据添加到请求中? 谢谢! 问题答案: 代替使用urllib2,您可以使用request。这个新的python lib确实写得很好,并且使用起来更加简单直观。 要发送json数据,

  • 好的,我对网络服务完全陌生,对于我正在做的一个项目,我试图了解整个SOAP。我想我对正在发生的事情有一个模糊的理解,但是我缺少一些具体的信息,我在谷歌上找不到任何有用的东西。 我已经阅读了其他人提出的问题,例如使用java向Web服务发出的SOAP请求,但我仍然无法完全弄清楚发生了什么。 具体来说,我尝试使用这里提供的服务http://ec.europa.eu/taxation_customs/v

  • 发送请求 发送同步请求 Web3j web3 = Web3j.build(new HttpService()); // defaults to http://localhost:8545/ Web3ClientVersion web3ClientVersion = web3.web3ClientVersion().send(); String clientVersion = web3Client

  • 嗨,有人能帮我吗。 如何请求soapweb服务并获取xml响应。Senario:使用SOAPUIIM发送带有用户名、密码身份验证的wsdl url,我还将发送SOAPXML数据并获得响应。如何使用nodejs或sails实现同样的目标。 在SoapUi中,我的soapxml请求如下 我的Soap身份验证就像 $UserName:xyz 我的wsdl url是http://esbuatt1wm.it