我尝试使用XML over HTTP与我们的供应商沟通。
到目前为止,我的要求是:
POST /some-service HTTP/1.1
Host: me
Content-Type: text/xml; charset=utf-8
Content-Length: 470
<?xml version="1.0" ?>
<PNARequest>
<Version>2.0</Version>
<TransactionHeader>
<SenderID>My Company</SenderID>
<ReceiverID>My Supplier</ReceiverID>
<CountryCode>FR</CountryCode>
<LoginID>My Login</LoginID>
<Password>My Password</Password>
<TransactionID>some hexa numbers</TransactionID>
</TransactionHeader>
<PNAInformation Quantity="1" SKU="more numbers here"/>
<ShowDetail>2</ShowDetail>
</PNARequest>
(内容长度可能有所不同,因为我在粘贴之后改变了身体。)
我将其发送到供应商的端口443,没有加密(测试目的)。 之前,我有一个正确的响应,具有良好的XML结构。现在,作为回应我只能这样做:
'\x15\x03\x00\x00\x02\x02\n'
我用Python显示了这个:print repr(response)
这是完整的反应,而不仅仅是身体。没有标题,没有这样的。
在供应商方面,他们甚至不会在他们的日志中看到我的请求。那么,有什么进展的线索?任何帮助将不胜感激。
谢谢!
更新
这是我发送此请求的Python代码(请注意,这只是一个测试通信过程的脚本,看看真正交换的内容):
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import re
import socket
def condense(body):
body = re.sub(' +<','<', body)
return body.replace('\n', '')
def post(host, port, api, body, content_type="text/xml; charset=utf-8",
me="my.ip"):
body = condense(body)
lines = [
"POST {} HTTP/1.1".format(api),
"Host: {}".format(me),
"Content-Type: {}".format(content_type),
"Content-Length: {}".format(len(body)),
"",
"{}".format(body),
"",
"",
]
msg = "\r\n".join(lines)
s = socket.create_connection((host, port))
s.send(msg)
print "REQUEST ##############################################"
print msg
res = ""
data = True
while data:
data = s.recv(8192)
res += data
s.close()
print "RESPONSE #############################################"
print res
print
def unpack_post(d, **kwargs):
post(d["host"], d["port"], d["api"], d["body"], **kwargs)
my_supplier = {
"host": "my.supplier.com",
"port": 443,
"api": "/some-api",
"body": """<?xml version="1.0" ?>
<PNARequest>
<Version>2.0</Version>
<TransactionHeader>
<SenderID>Your Company</SenderID>
<ReceiverID>My Supplier</ReceiverID>
<CountryCode>FR</CountryCode>
<LoginID>My Login</LoginID>
<Password>My Password</Password>
<TransactionID>Some Hexa Numbers</TransactionID>
</TransactionHeader>
<PNAInformation Quantity="1" SKU="More Numbers Here"/>
<ShowDetail>2</ShowDetail>
</PNARequest>""",
}
if __name__ == "__main__":
unpack_post(my_supplier)
我知道这有点难看,但我这样做仅仅是为了测试目的所以...... 我编写此代码是因为我喜欢在多个服务器上进行测试,例如https://www.200please.com/,...
答案 0 :(得分:0)
所以,正如我在其中一条评论中所说,这可能是由于服务器方面的问题。
我知道这不是一个完美的答案,但由于我的供应商不与我分享他们的日志,我可以猜测......
我稍后会编辑这个答案,如果我找到新的东西要分享,但我不会因为这不再是一个编程问题(再次,我想这里),那不是那个地方。