2014-11-19 4 views
1

저는 HTTP를 통한 XML로 공급 업체와 통신하려고합니다.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' 

I이 사용 파이썬으로 표시 한 : print repr(response)

을 그리고 이것은 전체 응답 만이 아니라 몸이다. 헤더가 없으며 그런 것은 없습니다.

공급 업체 측에서는 로그에서 내 요청을 보지 못합니다. 그래서, 무슨 일이 일어나고 있는지 어떤 단서가 있습니까? 어떤 도움이라도 대단히 감사하겠습니다.

감사합니다.

업데이트 여기

(정말 교환 무슨이 통신 프로세스를 테스트하기 위해 단지 스크립트입니다 점에 유의하고, 참조)이 요청을 보내는 내 파이썬 코드 것 :

#!/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

요청하는 방법에 대해 자세히 설명해주십시오. 코드를 게시하면 해당 부분에서 버그를 찾을 수 있습니다. 서버가 요청을 로그하지 않으면 어쩌면 보지 않을 수도 있습니다. 어쩌면 방화벽이 그것을 막을 수도 있습니다. 어쩌면 어쩌면, 아마; 여기에는 너무 많은 옵션이 있습니다. 우리가 보는 것에 오류를 찾으려고 노력할 수는 있지만, 우리가 보지 못하는 것들에 대한 오류는 _ 추측하기가 매우 어렵습니다. 그래서 당신이 가진 모든 것을 제공하십시오. – Alfe

+1

누군가 같은 문제가있는 경우에 대비하여 여기에 화분을 심고있었습니다. 실제로, 그것은 서버 측의 많은 것들에 달려 있기 때문에 ... 게다가, 나는 문제를 설명 할 수있는 공급자로부터 이메일을 받았습니다. (그러나 그들은 그들이하는 일을 모두 설명하지는 않습니다 ...) 그러나 커뮤니티를 위해서 나는 코드를 게시 할 것이고 누군가가 도움이 될 것이라고 생각할 것이다. (내 나쁜 영어로 울부 짖음) – Yann

+0

당신의 노력을 위해 내 +1을 얻었습니다 :) – Alfe

답변

0

내 의견에서 말했듯이 이것은 아마도 서버 측 문제 때문일 수 있습니다. 나는 새로운 발견하면

나는 나중에이 답변을 편집 할 수 있습니다

... 이것은 완벽한 해답이 아니라 내 공급 업체가 나와 함께 자신의 로그를 공유하지 않기 때문에, 내가 일을 생각 만 수있어 공유 할 물건이지만, 프로그래밍상의 문제가 아니기 때문에 (다시 생각해 보겠습니다.) 그 곳이 아닙니다.

+1

"내일 답장을 받으실 수 있습니다." 젠장, 나는 이것을 잊어서는 안된다! – Yann

관련 문제