I have a script which sends a XML within a POST method using python requests module to an API. This code works from my test machine (windows) when I deploy the script to my PROD server (Debian) I always receive a parsing error. If I change the encoding of the file to ANSI it will work on the Debian server.
It seems to be some kind of encoding issue. However from my point of view I set up everything correctly in order to send the file as utf-8.
This is the relevant code snippet:
# prepare XML for API call
url = "https://myurl.com/api/method"
# use XML template and replace some wildcards
payloadTemplate = open("message.xml", encoding="utf-8")
payload = payloadTemplate.read()
payload = str(payload % (sessiontoken, accountName, key, userId))
headers = {
'X-XYZ-API-COMPATIBILITY-LEVEL': '1234',
'X-XYZ-API-CALL-NAME': 'methodname',
'X-XYZ-API-SITEID': '11',
'Content-Type': 'application/xml; charset=utf-8'
}
# send request
response = requests.request("POST", url, headers=headers, data=payload)
The XML looks like this:
<?xml version="1.0" encoding="utf-8"?>
<APIMethod xmlns="urn:Tool:apis:eBLBaseComponents">
<RequesterCredentials>
<ToolAuthToken>%s</ToolAuthToken>
</RequesterCredentials>
<ItemID>12345678</ItemID>
<MemberMessage>
<Subject>Thanks</Subject>
<Body>random text some information %s another information %s</Body>
<QuestionType>General</QuestionType>
<RecipientID>%s</RecipientID>
</MemberMessage>
</APIMethod>
Using Postman or the script on Windows is working fine. On Debian it's not working anymore. If I save the XML file in ANSI encoding it will work on Debian as well. I'm using this as workaround, unfortuantely I would like to have the same solutions for Windows and Unix (which is in my case TEST and PROD). Also I would like to include proper German letters.
Glad for any help
I added the charset=utf-8 to the header. It changes nothing un Debian side. In windows its still working. When I'm printing the payload as string, everything is fine. There seems to be no encoding issue.