Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python 3 urllib的soap信封中编码值?(Re:TypeError POST数据应为字节)_Soap_Python 3.4_Urllib - Fatal编程技术网

如何在Python 3 urllib的soap信封中编码值?(Re:TypeError POST数据应为字节)

如何在Python 3 urllib的soap信封中编码值?(Re:TypeError POST数据应为字节),soap,python-3.4,urllib,Soap,Python 3.4,Urllib,我知道在Python3上的urllib中发送的数据需要进行urlencoded,我在这里研究了其他答案,如和。这些解决方案中的每一个都显示了在传递到urllib之前对数据进行urlencoded的dict。然而,我的数据是一个巨大的soap信封,我不知道该对其中哪一个进行URL编码 下面是我遇到的一段代码: xml = str(Et.tostring(envelope), 'utf-8') if self._logging: print('

我知道在Python3上的urllib中发送的数据需要进行urlencoded,我在这里研究了其他答案,如和。这些解决方案中的每一个都显示了在传递到urllib之前对数据进行urlencoded的dict。然而,我的数据是一个巨大的soap信封,我不知道该对其中哪一个进行URL编码

下面是我遇到的一段代码:

        xml = str(Et.tostring(envelope), 'utf-8')
        if self._logging:
            print('URL: ' + self._url)
            print('Request: ' + xml)

        request_headers = {'Content-type': 'text/xml; charset=UTF-8',
                           'Content-length': str(len(xml))}
        request = urllib.request.Request(self._url, xml, request_headers)
        raw_response = urllib.request.urlopen(request).read()
完整代码是,以下是
xml
变量中包含的内容:

<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><PosRequest xmlns="http://Hps.Exchange.PosGateway"><Ver1.0><Header><SecretAPIKey>skapi_cert_MYl2AQAowiQAbLp5JesGKh7QFkcizOP2jcX9BrEMqQ</SecretAPIKey><DeveloperID>000000</DeveloperID><VersionNbr>0000</VersionNbr></Header><Transaction><CreditSale><Block1><AllowDup>Y</AllowDup><AllowPartialAuth>N</AllowPartialAuth><Amt>1.15</Amt><CardHolderData><CardHolderFirstName>evan</CardHolderFirstName><CardHolderLastName>stone</CardHolderLastName><CardHolderPhone>9405947406</CardHolderPhone><CardHolderAddr>627 Woodland</CardHolderAddr><CardHolderCity>Denton</CardHolderCity><CardHolderState>TX</CardHolderState><CardHolderZip>76209</CardHolderZip></CardHolderData><CardData><TokenData><TokenValue>supt_eaztSD0E0uc3SOcdsiRf9ney</TokenValue><CardPresent>N</CardPresent><ReaderPresent>N</ReaderPresent></TokenData><TokenRequest>N</TokenRequest></CardData></Block1></CreditSale></Transaction></Ver1.0></PosRequest></soap:Body></soap:Envelope>
skapi_cert_Myl2aQAOWIQABLP5JESGKH7QFKCIZOP2JCX9BREMQ000000YN1.15evanstone9405947406627 WoodlandDentonTX76209supt_EAZTSD0E0UC3OCDSIRF9NEYNN
注意:我还通过
xml=xml.encode('utf-8')
手动将这个
xml
变量转换为bytes对象,只是为了传递bytes对象。显然,这并没有奏效。我在PyCharm调试器中跟踪它的路径,它又变成了一个字符串,我得到了相同的错误:

“TypeError:POST数据应为字节或字节的iterable。它不能为str类型。”