It’s basic stuff like this that always slips my mind when I need it. There are literally millions of ways to do this, but for me, this one is the most practical.
This should work on all Python versions (both 2.x and 3) and doesn’t use any nonstandard libraries. Of course, you don’t have to read XML from a file, you can easily modify the method to work with an XML string. In this example, I’m posting to an HTTP host. You could also easily modify this to work over HTTPS by using httplib.HTTPS as a webservice.
import sys, httplib HOST = www.example.com API_URL = /your/api/url def do_request(xml_location): """HTTP XML Post request, by www.forceflow.be""" request = open(xml_location,"r").read() webservice = httplib.HTTP(HOST) webservice.putrequest("POST", API_URL) webservice.putheader("Host", HOST) webservice.putheader("User-Agent","Python post") webservice.putheader("Content-type", "text/xml; charset=\"UTF-8\"") webservice.putheader("Content-length", "%d" % len(request)) webservice.endheaders() webservice.send(request) statuscode, statusmessage, header = webservice.getreply() result = webservice.getfile().read() print statuscode, statusmessage, header print result do_request("myfile.xml")