【问题标题】:TransportError: HTTP Error 400: Bad Request While Using SUDS (Python)TransportError:HTTP 错误 400:使用 SUDS 时出现错误请求(Python)
【发布时间】:2014-02-06 18:31:13
【问题描述】:

我在尝试使用 Python 中的 SUDS 访问 WS 时遇到此错误。

知道我做错了什么吗? (是的,我对 Python 还是很陌生)

Python 代码

# -*- coding: utf-8 -*-

from suds.client import Client
from apscheduler.scheduler import Scheduler
import datetime
import logging
from email.header    import Header
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
from smtplib         import SMTP_SSL
from colorlog import ColoredFormatter

# Configurações do Log
logging.basicConfig(format='%(asctime)s - %(message)s', datefmt='%d/%m/%Y %H:%M:%S', filename='ConfirmarPedidoSmsBroker-Test.log',level=logging.INFO)
logging.getLogger().addHandler(logging.StreamHandler())
now = datetime.datetime.now()

#Informações para o consumo do WS
WSDL_URL = "http://123.168.1.132:8084/abc-ws-provider/AbcBrokerBSv1.0?wsdl"

#Criações dos tipos para gerar o objeto complexo
class Evale(object):
    codigoDeAutorizacao = 1234567

class Cliente (object):
    identificacaoDoCliente = 12345
    codigoDoCliente = 101010
    razaoSocial = "None"

class Telefone (object):
    ddd = 21
    numero = 1234-5678

class Contato (object):
    telefone = Telefone()

class HorariosDeAtendimento (object):
    diaDaSemana = "Sunday"
    horaInicial = "07:30:00"
    horaFinal = "20:00:00"

class TipoDeAtendimentoRealizado (object):
    horariosDeAtendimento = HorariosDeAtendimento()

class Revenda (object):
    cliente = Cliente()
    identificacaoDoEndereco = 987654
    codigoDoEndereco = 8765567
    numeroDoDocumento = "2312341"
    filialDoDocumento = 0009
    digitoDoDocumento = 32

class RevendaPrincipal(object):
    revenda = Revenda()

class RevendaAlternativa(object):
    revenda = Revenda()

class EnderecoDoSolicitante(object):
    logradouro = "Street Test"
    numeroDoEndereco = 80
    complemento = "Penth"
    municipio = "New York"
    bairro = "Brooklin"
    cep = "74123"
    estado = "NY"

class PedidoSms(object):
    identificacaoDaTransacao = 1010
    evale = Evale()
    revendaPrincipal = RevendaPrincipal()
    revendaAlternativa = RevendaAlternativa()
    enderecoDoSolicitante = EnderecoDoSolicitante()
    latitudeDoEnderecoDoSolicitante = -92.123443
    longitudeDoEnderecoDoSolicitante = -81.98765

class ConfirmarPedidoSmsBrokerRequest(object):
    pedidoSms = PedidoSms()

class ConfirmarPedidoSmsBroker_InputVariable (object):
    confirmarPedidoSmsBrokerRequest = ConfirmarPedidoSmsBrokerRequest()

class Input (object):
    confirmarPedidoSmsBroker_InputVariable = ConfirmarPedidoSmsBroker_InputVariable()


# Método que chama o serviço
def sendRequestToService():
    confPedido = Input()
    logging.info("ConfirmarPedidoSmsBroker-Test at " + str(now))
    logging.info("WSDL_URL " + WSDL_URL)
    logging.info("Passing URL to Client")
    client = Client(WSDL_URL)
    logging.info("Trying to access the service")
    response = client.service.confirmarPedidoSmsBroker(confPedido)
    logginf.info(response)


if __name__ == '__main__':
    sendRequestToService()

这是我尝试运行时遇到的错误。

06/02/2014 17:06:17 - ConfirmarPedidoSmsBroker-Test at 2014-02-06 17:06:17.443663
06/02/2014 17:06:17 - WSDL_URL http://111.168.1.132:8084/abc-ws-provider/AbcBrokerBSv1.0?wsdl
06/02/2014 17:06:17 - Passing URL to Client
06/02/2014 17:06:17 - Import:0x10ab61d10, imported schema (http://www.abcdef.com.br/Abab/BO/v3) at (http://123.168.1.132:8084/../../../../../Abc/Def/Somethingv3.xsd), failed
Traceback (most recent call last):
  File "build/bdist.macosx-10.9-intel/egg/suds/xsd/sxbasic.py", line 560, in download
    d = reader.open(url)
  File "build/bdist.macosx-10.9-intel/egg/suds/reader.py", line 79, in open
    d = self.download(url)
  File "build/bdist.macosx-10.9-intel/egg/suds/reader.py", line 95, in download
    fp = self.options.transport.open(Request(url))
  File "build/bdist.macosx-10.9-intel/egg/suds/transport/https.py", line 60, in open
    return  HttpTransport.open(self, request)
  File "build/bdist.macosx-10.9-intel/egg/suds/transport/http.py", line 64, in open
    raise TransportError(str(e), e.code, e.fp)
TransportError: HTTP Error 400: Bad Request

【问题讨论】:

    标签: http python-2.7 suds http-status-code-400


    【解决方案1】:

    您的 WSDL 服务似乎在响应您传递的请求时出现 400 错误(可能缺少必需的参数等)。请尝试add debug logging,如下所示:

    import logging
    logging.basicConfig(level=logging.DEBUG)
    logging.getLogger('suds.client').setLevel(logging.DEBUG)
    

    完成后,再试一次(您可以打开交互式 python shell 并粘贴您的代码,启用日志记录并调用 sendRequestToService 函数。

    请通过更新修改您的问题,我将酌情修改我的答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-27
      • 2015-08-18
      • 2015-11-15
      • 1970-01-01
      • 1970-01-01
      • 2016-08-25
      • 2020-06-30
      • 1970-01-01
      相关资源
      最近更新 更多