2014-11-19 4 views
1

Я пытаюсь связаться с нашим поставщиком с 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/, ...

+0

Просьба подробно рассказать о том, как вы отправляете свой запрос. Отправьте код, чтобы мы могли найти ошибки в этой части. Если сервер не регистрирует ваш запрос, возможно, он его не видит. Возможно, брандмауэр блокирует его. Может быть, может быть, может быть; здесь слишком много вариантов. Мы можем попытаться найти ошибки в том, что видим, но очень сложно _guess_ ошибки в вещах, которые мы не видим, поэтому предоставляйте _everything_ у вас. – Alfe

+1

Я потащил сюда, если у кого-то была такая же проблема. Потому что, действительно, это зависит от многих вещей на стороне сервера ... Кроме того, у меня только что было электронное письмо от моего поставщика, который мог бы объяснить проблему (но они не объясняют, что они делают ...) Но ради сообщества, я отправлю свой код, и, надеюсь, кто-то подумает об этом. (sry для моего плохого английского) – Yann

+0

Получил мой ⁺¹ за ваши усилия :) – Alfe

ответ

0

Итак, как я уже говорил в одном из своих комментариев, это, вероятно, связано с проблемой на стороне сервера.

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

Я буду править этот ответ позже, если я найду новый вещи, чтобы поделиться, но я не с тех пор, как это больше не проблема программирования (опять же, я думаю, здесь), это не место для этого.

+1

«Вы можете принять свой собственный ответ завтра». Черт возьми, я не должен забывать об этом! – Yann

 Смежные вопросы

  • Нет связанных вопросов^_^