LINUX.ORG.RU

[python] отправка SOAP на https сервер

 


0

1

Здравствуйте, подскажите как отправить SOAP запрос на https сервер.

Делаю вот так:

import sys, httplib

SoapMessage = """<?xml version="1.0" encoding="windows-1251"?> 
<soapenv:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope"> 
<soapenv:Header/> 
<soapenv:Body> 
</soapenv:Body> 
</soapenv:Envelope>    
"""

webservice = httplib.HTTPS("https://user:pwd@server.com:8443")
webservice.putrequest("POST", "/user_path")
webservice.putheader("Host", "server.com")
webservice.putheader("User-Agent", "Python post")
webservice.putheader("Content-type", "text/xml; charset=\"UTF-8\"")
webservice.putheader("Content-length", "%d" % len(SoapMessage))
webservice.putheader("SOAPAction", "\"\"")
webservice.endheaders()
webservice.send(SoapMessage)

statuscode, statusmessage, header = webservice.getreply()
print "Response: ", statuscode, statusmessage
print "headers: ", header
res = webservice.getfile().read()
print res

При отправке вылетает ошибка:

  File "soap.py", line 41, in <module>
    webservice.endheaders()
  File "/usr/lib/python2.7/httplib.py", line 951, in endheaders
    self._send_output(message_body)
  File "/usr/lib/python2.7/httplib.py", line 811, in _send_output
    self.send(msg)
  File "/usr/lib/python2.7/httplib.py", line 773, in send
    self.connect()
  File "/usr/lib/python2.7/httplib.py", line 1154, in connect
    self.timeout, self.source_address)
  File "/usr/lib/python2.7/socket.py", line 553, in create_connection
    for res in getaddrinfo(host, port, 0, SOCK_STREAM):
socket.gaierror: [Errno -2] Name or service not known

При этом без разницы, слать данные на http или https, всё равно вылетает эта ошибка.

Ты неправильно юзаешь httplib: в аргументах там не URL, а просто имя/адрес хоста, порт передается отдельным аргументом, данные авторизации тоже абсолютно лишние. Вообще, складывается ощущение, что ты категорично путаешь применение httplib и urllib2 - первый редко вообще когда используется напрямую без urllib, потом SOAP реквесты нормальными людьми так не формируются. Если отбросить лирику, то самое простое и самое правильное решение - выкинуть кусок кода который есть, далее использовать suds или SOAPpy какой.

BigAlex ★★★
()

Кто ж такие костыли разрабатывает? возьми suds. надеюсь гугл тебя не забанил?

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.