Я пытаюсь связаться с нашим поставщиком с XML через HTTP.Странные символы в ответе XML
До сих пор мой запрос что-то вроде:
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)
И это полный ответ, а не только тело. Нет заголовков, ничего подобного.
Со стороны поставщика они даже не видят мой запрос в своих журналах. Итак, какая-то подсказка о том, что происходит? Любая помощь будет оценена.
Спасибо!
Update
Вот мой 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/, ...
Просьба подробно рассказать о том, как вы отправляете свой запрос. Отправьте код, чтобы мы могли найти ошибки в этой части. Если сервер не регистрирует ваш запрос, возможно, он его не видит. Возможно, брандмауэр блокирует его. Может быть, может быть, может быть; здесь слишком много вариантов. Мы можем попытаться найти ошибки в том, что видим, но очень сложно _guess_ ошибки в вещах, которые мы не видим, поэтому предоставляйте _everything_ у вас. – Alfe
Я потащил сюда, если у кого-то была такая же проблема. Потому что, действительно, это зависит от многих вещей на стороне сервера ... Кроме того, у меня только что было электронное письмо от моего поставщика, который мог бы объяснить проблему (но они не объясняют, что они делают ...) Но ради сообщества, я отправлю свой код, и, надеюсь, кто-то подумает об этом. (sry для моего плохого английского) – Yann
Получил мой ⁺¹ за ваши усилия :) – Alfe