Python POST无法正常工作

时间:2012-02-10 15:26:59

标签: python post urllib

我正在尝试将POST数据从python脚本发送到url。这是代码:

def createperson(self,name=None):
        SERVER_BASE_ADDR = 'http://localhost:8000/'
        postdata = urllib.urlencode({'name':name})
        req = urllib2.Request(SERVER_BASE_ADDR + 'people/add')
        fd = urllib2.urlopen(req,postdata)
        return name

但是这会返回

HTTPError: HTTP Error 500: INTERNAL SERVER ERROR

在网址上添加人员很好。有什么想法吗?

修改

服务器端使用django装饰器来处理POST和GET。

@require_http_methods(["GET", "POST"])
def add(request):
       if request.method == "POST":
           #do stuff with post data

上面的python代码与在html模板上提交表单不一样吗?如果它相同那么处理程序不应该以同样的方式处理它吗?

谢谢

使用:

解决
c = urllib2.build_opener()
postdata = urllib.urlencode({'name':name})
r = c.open(url,postdata)

一种不同的方法,但做的工作。谢谢你的所有答案。

2 个答案:

答案 0 :(得分:2)

HTTP 500错误意味着问题不会发生在客户端python脚本上,而是发生在服务器端。

检查服务器端代码,可能只从GET读取数据,而不是POST。

答案 1 :(得分:2)

HTTP 500错误肯定是内部服务器错误。服务器上出现问题,正如@dlutxx指出的那样。

为了进一步调试,我认为你应该检查你的Django处理程序。如果它真的适用于GET请求而不是POST请求,那么你应该看看GET处理程序和POST处理程序之间的区别。

import logging

logger = logging.getLogger(__name__)

@require_http_methods(["GET", "POST"])
def add(request):
    try:
        if request.method == "POST":
            # Something is probably broken here.
        elif request.method == "GET":
            # But apparently works fine here.
    except:
        # Why don't we insert some debugging output to try to catch it.
        logger.exception("Problem in add handler")
        raise

编辑使用Python日志框架(每Django docs)而不是stdout。