当前位置: 首页 > 知识库问答 >
问题:

将curl命令转换为Python3请求。post(SOAP xml)

白青青
2023-03-14

我试图让下面的命令行使用请求库在Python中工作:

curl --header "Content-Type: text/xml;charset=UTF-8" --data @test_GetCapabilities.xml http://www.bom.gov.au/waterdata/services?service=SOS

curl在Anaconda Prompt中从包含test_GetCapabilities.xml文件的目录中执行时立即返回所需的响应。但是当我运行下面的Python脚本时,发布请求不起作用。

import requests
url = 'http://www.bom.gov.au/waterdata/services?service=SOS'
payload = "test_GetCapabilities.xml"
headers = {'Content-Type': 'text/xml', 'charset': 'UTF-8'}
r = requests.post(url, data=open(payload), headers=headers)
print(r.content)

上述代码在大约一分钟后超时,并给出以下堆栈:

Runfile('C:/Python/SOAP_curl.py', wdir='C:/Python')Traceback(最近的调用最后):

文件“”,第1行,在runfile('C:/Python/SOAP\u curl.py',wdir='C:/Python'中)

文件“C:\ProgramData\Anaconda3\lib\site packages\spyder\u kernels\customize\spydercustomize.py”,第668行,在runfile execfile(文件名,命名空间)中

文件“C:\ProgramData\Anaconda3\lib\site packages\spyder\u kernels\customize\spydercustomize.py”,第108行,在execfile exec中(compile(f.read(),文件名,'exec'),命名空间)

文件“C:/Python/SOAP_curl.py”,第16行,在r=requests中。post(url,数据=打开(有效负载),标题=标题)

文件"C:\Program Data\Anaconda3\lib\site-包\请求\api.py",第112行,在后返回请求('post',url,data=data,json=json,**kwargs)

文件“C:\ProgramData\Anaconda3\lib\site packages\requests\api.py”,第58行,在请求返回会话中。请求(方法=方法,url=url,**kwargs)

文件“C:\ProgramData\Anaconda3\lib\site packages\requests\sessions.py”,第512行,在request resp=self中。发送(准备,**发送)

在发送r=adapter.send(请求,**kwargs)中,文件"C:\Program Data\Anaconda3\lib\site-包\请求\sessions.py",第622行。

文件“C:\ProgramData\Anaconda3\lib\site packages\requests\adapters.py”,第495行,在send-raise-ConnectionError(err,request=request)中

ConnectionError:(“连接已中止”,BadStatusLine('HTTP/1.1 0 Init\r\n'))

以下是test_GetCapabilities.xml内容:

<soap12:Envelope xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"
xmlns:sos="http://www.opengis.net/sos/2.0"
xmlns:wsa="http://www.w3.org/2005/08/addressing"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ows="http://www.opengis.net/ows/1.1"
xmlns:fes="http://www.opengis.net/fes/2.0"
xmlns:gml="http://www.opengis.net/gml/3.2"
xmlns:swes="http://www.opengis.net/swes/2.0"
xsi:schemaLocation="http://www.w3.org/2003/05/soap-envelope
http://www.w3.org/2003/05/soap-envelope/soap-envelope.xsd
http://www.opengis.net/sos/2.0
http://schemas.opengis.net/sos/2.0/sos.xsd">
<soap12:Header>
<wsa:To>http://www.ogc.org/SOS</wsa:To>
<wsa:Action> http://www.opengis.net/def/serviceOperation/sos/core/2.0/GetCapabilities
</wsa:Action>
<wsa:ReplyTo>
<wsa:Address>http://www.w3.org/2005/08/addressing/anonymous</wsa:Address>
</wsa:ReplyTo>
<wsa:MessageID>0</wsa:MessageID>
</soap12:Header>
<soap12:Body>
<sos:GetCapabilities service="SOS"/>
</soap12:Body>
</soap12:Envelope>

共有1个答案

夏烨霖
2023-03-14

谢谢@kcorlidy。

以下是更正后的工作代码:

import requests 
url = 'http://www.bom.gov.au/waterdata/services?service=SOS' 
payload = "test_GetCapabilities.xml" 
headers = {'Content-Type': 'text/xml', 'charset': 'UTF-8'} 
with open(payload) as fd: 
    r = requests.post(url, data=fd.read().replace("\n",""), headers=headers) 
print(r.content); 
 类似资料:
  • 我有一个post请求,可以很好地与postman配合使用,我尝试将其转换为cUrl请求,以便通过提示命令或导入postman来使用它。 如果“KEY”字段为空,它将不起作用。 以下是我尝试的:

  • 问题内容: 我从来没有做过卷曲,所以需要一些帮助。我已经尝试通过示例来解决这个问题,但是我无法理解! 我有一个curl命令,可以从linux(ubuntu)命令行成功运行,该命令行通过api将文件放入Wiki。 我需要将此curl命令合并到我正在构建的PHP脚本中。 如何转换curl命令,使其在PHP脚本中起作用? cookie.txt包含身份验证,但是我不会在脚本中将其以明文形式出现,因为这将仅

  • 我正在尝试将curl中的以下工作请求转换为python请求(使用请求http://docs.python-requests.org/en/v0.10.7/). (请注意,我使用了一个假url,但该命令确实适用于真实url) 接收端(在烧瓶中运行)执行以下操作: 在curl(7.30)中,在Mac OS X(10.9)上运行,上面的命令正确返回使用标记查询过滤的json列表。 我的python脚本如

  • 问题内容: 我有以下CURL请求,谁能请我确认subesquest HTTP请求是什么? 会是这样吗? 任何人都可以帮助我将上述curl请求完全转换为httpreq。 提前致谢。 苏维 问题答案: 有很多方法可以实现这一目标。在我看来,以下一项是最简单的,同意它不是很灵活,但是可以工作。

  • 我将使用MailgunAPI。 以下是在终端中正常工作的cRUL命令。 我无法理解如何使用Postman运行此命令。 我试图导入cURL命令到邮递员,但它不导入api: key。我真的不明白如何将这个api密钥导入到Postman中以正确运行api。 请帮助我使用Postman运行此命令。 非常感谢。

  • 我正在尝试使用网站提供的Zoom.us API。他们给我cURL命令来创建一个新用户: 我翻译成Ajax: 产生新的405错误: