将xml发布到django中的外部URL?

时间:2016-02-24 17:30:18

标签: python xml django

您如何建议我将xml数据发布到django中的网址。

例如,在我的views.py中调用视图时,我正在尝试对网址发帖,然后返回xml响应内容。

到目前为止我所拥有的:

import xml
URL ="http://something.com"

def process(request):
    response = None
    if request.method=="POST":
        xml_data = """
            <?xml version='1.0' encoding='UTF-8'?>
            <something><retrieve_user>Tammy</retrieve_user></something>
        """
        headers = {
            "Host": "myhost",
            "Content-Type": "text/xml; charset=UTF-8",
            "Content-Length": len(xml_data)
        }

        #make response variable equal to process to post xml_data and headers to URL
        response = ??

    return response

在此之后,我如何获得响应内容的值。例如,如果响应内容返回了这个:

<response_begin> 
    <array>
        <info>
            <name>Name Something</name>
            <email>Email Something</email>
        </info>
        <info>...</info>
    </array>
</response_begin>

如何检索值&#34; Name Something&#34;和&#34;电子邮件东西&#34;?提前谢谢。

2 个答案:

答案 0 :(得分:1)

我认为django部分在这种情况下是红鲱鱼。查看python内置的httplib模块。它将允许您发出POST请求。页面底部有一些示例。

https://docs.python.org/2/library/httplib.html

您希望将内容类型和接受标题更改为&#34; text / xml&#34;或&#34; application / xml&#34;。

答案 1 :(得分:1)

我找到了一篇帮助我使用httplib解决发布问题的文章。

https://gist.github.com/hoest/3655337

import httplib
import xml.dom.minidom

HOST = "www.domain.nl"
API_URL = "/api/url"

def do_request(xml_location):
    """HTTP XML Post request"""
    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()
resultxml = xml.dom.minidom.parseString(result)

print statuscode, statusmessage, header
print resultxml.toprettyxml()