Отправьте запрос Soap 1.1 через Python Requests или urllib - PullRequest
0 голосов
/ 05 декабря 2018

Я понимаю, что самая первая реакция того, кто читает это, - сказать: «Ах, это повторяющаяся просьба», но, поверьте мне, это не так.Я перепробовал все примеры, перечисленные в переполнении стека, чтобы достичь того, чего хотел, но все же не смог этого сделать.

Я хочу отправить следующие детали, которые я вижу в SoapUI, на данный WSDL либо через urllib2, либо запросы с указанными ниже настройками после неудачного сбоя, чтобы выполнить это через Zeep и Suds

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:slab="http://m2.slab">
   <soapenv:Header/>
   <soapenv:Body>
      <slab:PLChecker>
         <!--Optional:-->
         <slab:request>
            <!--Optional:-->
            <slab:ServiceProviderReferenceNumber>?</slab:ServiceProviderReferenceNumber>
            <!--Optional:-->
            <slab:ServiceNumber>0235625452</slab:ServiceNumber>
         </slab:request>
      </slab:PLChecker>
   </soapenv:Body>
</soapenv:Envelope>

Это настройки SoapUI, которые я использовал

До сих пор я пробовал аутентификацию httpbasic, но мне кажется, что я потерял процесс создания мыльного конверта с правильными значениями:

  • Encoding
  • имя пользователя
  • пароль
  • Тип аутентификации: Без аутентификации
  • WSS Тип пароля: PasswordText

Любая помощьна это высоко ценится.Это код, который я использовал до сих пор.

import requests
from requests.auth import HTTPBasicAuth
import requests
import base64
import urllib
import ssl
ssl.match_hostname = lambda cert, hostname: True

import logging

# These two lines enable debugging at httplib level (requests->urllib3->http.client)
# You will see the REQUEST, including HEADERS and DATA, and RESPONSE with HEADERS but without DATA.
# The only thing missing will be the response.body which is not logged.
try:
    import http.client as http_client
except ImportError:
    # Python 2
    import httplib as http_client
http_client.HTTPConnection.debuglevel = 1

# You must initialize logging, otherwise you'll not see debug output.
logging.basicConfig()
logging.getLogger().setLevel(logging.DEBUG)
requests_log = logging.getLogger("requests.packages.urllib3")
requests_log.setLevel(logging.DEBUG)
requests_log.propagate = True


url="https://commontest/PService.svc?singleWsdl"
# headers = {'content-type': 'application/soap+xml'}
request_headers = {'content-type': 'text/xml; charset=utf-8'}

body = """<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:slab="http://m2.com.au/slab">
   <soapenv:Header/>
   <soapenv:Body>
      <slab:PLChecker>
         <!--Optional:-->
         <slab:request>
            <!--Optional:-->
            <slab:ServiceProviderReferenceNumber>?</slab:ServiceProviderReferenceNumber>
            <!--Optional:-->
            <slab:ServiceNumber>?</slab:ServiceNumber>
         </slab:request>
      </slab:PLChecker>
   </soapenv:Body>
</soapenv:Envelope>"""

response = requests.post(url,data=body, verify = False, auth = ('user', 'pass'), headers = request_headers)
print response
...