Найти - Пользователи
Полная версия: SOAP запрос не возвращает значение
Начало » Python для новичков » SOAP запрос не возвращает значение
1 2
Jeck290
Отправляю SOAP запрос на WCF сервис с помощью такого кода

from suds.client import Client
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
SB_PRIVATE_ACCESS = {"PATH":"HTTPS-SERVER",}
client = Client(SB_PRIVATE_ACCESS['PATH'])
print client
response = client.service.GetCountryList(token='{KEY}',version='1.0')
print response

когда мы делаем команду print client то выводятся все функции и типы которые потдерживает сервис, тоесть сервер работает. В списке видим самую минималистическую функцию для запуска которой нуен только ключ доступа KEY ну и номер версии, вот когда я отправляю запрос получаю вот такую ошибку

socket.error: An existing connection was forcibly closed by the remote host

и так на каждую функцию которую ты вызываешь !
Думал что библиотека не работает или я что то не так делаю но попоробовав общедоступный SOAP сервис понял что все хорошо работает и без нареканий ((

Подскажи кто что думает по этому поводу !?
2mitrij
Suds стандартный используется? У меня стандартный тоже выдавал непонятные ошибки. Попробуй suds-jurko - форк, вроде он поновее, с ним все заработало, даже никакие https_context не пришлось прописывать.
Jeck290
Попробовал (( не выходит пишит туже ошибку
2mitrij
Лог бы полный ошибки глянуть.
Jeck290
DEBUG:suds.client:sending to (http://SERVER/AMLService/SearchService.svc)
message:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:ns0="http://hompouri.org/" 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:GetCountryList>
         <ns0:token>KEY</ns0:token>
         <ns0:version>1.0</ns0:version>
      </ns0:GetCountryList>
   </ns1:Body>
</SOAP-ENV:Envelope>
DEBUG:suds.client:headers = {'SOAPAction': '"http://hompouri.org/ISearchService/GetCountryList"', 'Content-Type': 'text/xml; charset=utf-8'}
DEBUG:suds.transport.http:sending:
URL: http://SERVER/AMLService/SearchService.svc
HEADERS: {'SOAPAction': '"http://hompouri.org/ISearchService/GetCountryList"', 'Content-Type': 'text/xml; charset=utf-8', 'Content-type': 'text/xml; charset=utf-8', 'Soapaction': '"http://hompouri.org/ISearchService/GetCountryList"'}
MESSAGE:
<?xml version="1.0" encoding="UTF-8"?><SOAP-ENV:Envelope xmlns:ns0="http://hompouri.org/" 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:GetCountryList><ns0:token>KEY</ns0:token><ns0:version>1.0</ns0:version></ns0:GetCountryList></ns1:Body></SOAP-ENV:Envelope>
Traceback (most recent call last):
  File "C:/Users/Dev01/Downloads/TEST/2.py", line 42, in <module>
    response = client.service.GetCountryList(token='KEY',version='1.0')
  File "C:\Python27\lib\site-packages\suds\client.py", line 521, in __call__
    return client.invoke(args, kwargs)
  File "C:\Python27\lib\site-packages\suds\client.py", line 581, in invoke
    result = self.send(soapenv)
  File "C:\Python27\lib\site-packages\suds\client.py", line 613, in send
    reply = self.options.transport.send(request)
  File "C:\Python27\lib\site-packages\suds\transport\https.py", line 66, in send
    return HttpTransport.send(self, request)
  File "C:\Python27\lib\site-packages\suds\transport\http.py", line 82, in send
    fp = self.u2open(u2request)
  File "C:\Python27\lib\site-packages\suds\transport\http.py", line 132, in u2open
    return url.open(u2request, timeout=tm)
  File "C:\Python27\lib\urllib2.py", line 437, in open
    response = meth(req, response)
  File "C:\Python27\lib\urllib2.py", line 550, in http_response
    'http', request, response, code, msg, hdrs)
  File "C:\Python27\lib\urllib2.py", line 469, in error
    result = self._call_chain(*args)
  File "C:\Python27\lib\urllib2.py", line 409, in _call_chain
    result = func(*args)
  File "C:\Python27\lib\urllib2.py", line 653, in http_error_302
    fp.read()
  File "C:\Python27\lib\socket.py", line 355, in read
    data = self._sock.recv(rbufsize)
  File "C:\Python27\lib\httplib.py", line 612, in read
    s = self.fp.read(amt)
  File "C:\Python27\lib\socket.py", line 384, in read
    data = self._sock.recv(left)
socket.error: [Errno 10054] An existing connection was forcibly closed by the remote host
вот такая картина.
Как я понял запрос на сервер идет в виде xml, а как туда можно добавить строчку <security mode = “Transport” /> ?????
Jeck290
Походу нужен wsHttpBinding а библиотеки для питона его не поддерживают :|
2mitrij
Хм, вот эта строчка наводит на кое-какие мысли:
File "C:\Python27\lib\urllib2.py", line 653, in http_error_302
HTTP 302, нужно почитать на тему urllib2 и данного кода ошибки.
Вспомнил, когда сам мучался с SOAP, помогла установка urllib3 . Конечно используется urlib2, но возможно urllib3 обновила какую-нибудь другую зависимость.
Как добавлять в запрос что-либо, можно почитать в оф. доке suds: https://fedorahosted.org/suds/wiki/Documentation. Там практически в самом конце раздел PLUGINS. Там же есть еще раздел CUSTOM HEADERS.
Сложно с SOAP на питоне, я не нашел ни одной актуальной либы, все давненько не обновлялись, считай заброшены, пляски с бубном обеспечены.
Да, кстати я писал на 3-ем питоне.
Найду свой код, посмотрю еще раз.
Jeck290
Спасибо еще раз твое наблюдение навело на одну ссылку которая помогла мне , может кому интересно будет
http://stackoverflow.com/questions/2388046/can-you-help-me-solve-this-suds-soap-issue
проблема была в ссылке доступа нужно было выставить https в location='https://www.clarityaccounting.com/api/v1' и все пошло вместо http
2mitrij
Пожалуйста)
Jeck290
проблема была в ссылке доступа нужно было выставить https в location='https://www.clarityaccounting.com/api/v1' и все пошло вместо http
Интересно, возьмем на заметку.
Jeck290
Рано радовался )) возникла еще одна проблема, нужно вызвать приложение с одним из типов данных
ArrayOfString = client.factory.create('ns0:ArrayOfSearchPersonSimpleContract')
но вылетает ошибка
suds.WebFault: Server raised fault: 'Object reference not set to an instance of an object.'
Пробовал ставить уже suds из репозитория v0.7 , ImportDoctor пробовал , да и ошибки такой не встречается в поисковике (( вот сижу думаю как создать обьект …
Хорошая это технология слава богу не часто ее пользуются.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB