使用urllib2的Python SOAP请求 [英] Python SOAP request using urllib2
问题描述
我正在尝试使用Python中的urllib2编写一个脚本来通过SOAP与sharepoint进行通信。我的代码成功连接到共享点列表,但连接后不执行任何操作。我的SOAP请求可能是错的吗?尽管sharepoint网站上存在2个列表项,但它似乎没有返回任何内容。
I'm attempting to write a script to communicate with sharepoint via SOAP using urllib2 in Python. My code is connecting successfully to a sharepoint list, but does not do anything once connected. Could my SOAP request be wrong? It seems to be returning nothing, despite 2 list items existing on the sharepoint site.
import urllib2
from ntlm import HTTPNtlmAuthHandler
user = r'DOMAIN\myusername'
password = "password"
url = "https://mysecuresite.com/site/_vti_bin/Lists.asmx"
passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
passman.add_password(None, url, user, password)
# create the NTLM authentication handler
auth_NTLM = HTTPNtlmAuthHandler.HTTPNtlmAuthHandler(passman)
# create and install the opener
opener = urllib2.build_opener(auth_NTLM)
urllib2.install_opener(opener)
request="""<?xml version="1.0" encoding="utf-8"?>
<SOAP:ENVELOPE xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SOAP:BODY>
<?XML:NAMESPACE PREFIX = "[default] http://schemas.microsoft.com/sharepoint/soap/" NS = "http://schemas.microsoft.com/sharepoint/soap/" /><GetListItems xmlns="http://schemas.microsoft.com/sharepoint/soap/">
<listName>site</listName>
<query></query>
<rowLimit></rowLimit>
</GetListItems>
</SOAP:BODY>
</SOAP:ENVELOPE>
"""
headers={"SOAPAction":"\"http://schemas.microsoft.com/sharepoint/soap/GetListItems\"","Content-Type":"text/xml;charset=UTF-8"}
req = urllib2.Request(url, request, headers)
response=urllib2.urlopen(req)
data = response.read()
print data
我试过了使用像haufe.sharepoint这样的库,但它们与HTTPS和ntlm不一致。
I've tried using libraries like haufe.sharepoint, but they don't play nice with HTTPS and ntlm.
推荐答案
如果是这样,请参阅下面的代码给你一些线索。我只是使用urllib2和Python 2.6.6调用SOAP服务。这对我来说很好。小心,因为我添加了一些代码来通过你可能需要或不需要的代理。在我的特殊情况我在Oracle Data Integrator(ODI)中调用SOAP服务
See the code below if it gives you some clues. I am simply calling a SOAP service using only urllib2 with Python 2.6.6. This worked fine for me. Be careful because I've added some code to pass through a proxy that you may or not need. In my particular case I am invoking a SOAP service in an Oracle Data Integrator (ODI)
import urllib2
url = "http://alexmoleiro.com:20910/oraclediagent/OdiInvoke?wsdl"
post_data = """<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">
<Body>
<OdiStartScenRequest xmlns="xmlns.oracle.com/odi/OdiInvoke/">
<Credentials xmlns="">
<OdiUser>loquesea</OdiUser>
<OdiPassword>aversiacierto</OdiPassword>
<WorkRepository>repofacil</WorkRepository>
</Credentials>
</OdiStartScenRequest>
</Body>
</Envelope>
"""
http_headers = {
"Accept": "application/soap+xml,multipart/related,text/*",
"Cache-Control": "no-cache",
"Pragma": "no-cache",
"Content-Type": "text/xml; charset=utf-8"
}
request_object = urllib2.Request(url, post_data, http_headers)
#IF YOU ARE NOT BEHIND A PROXY, DELETE THIS BLOCK
http_proxy_server = "10.115.4.2"
http_proxy_port = "8080"
http_proxy_realm = http_proxy_server
http_proxy_full_auth_string = "http://%s:%s" % (http_proxy_server, http_proxy_port)
proxy = urllib2.ProxyHandler({'http': http_proxy_full_auth_string})
opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)
#END OF --> IF YOU ARE NOT BEHIND A PROXY, DELETE THIS BLOCK
response = urllib2.urlopen(request_object)
html_string = response.read()
print html_string
希望有所帮助!
这篇关于使用urllib2的Python SOAP请求的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!