Python POST无效

0 投票
2 回答
2199 浏览
提问于 2025-04-17 12:46

我正在尝试从一个Python脚本向一个网址发送POST数据。以下是我的代码:

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 个回答

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文档)而不是标准输出。

2

HTTP 500错误表示问题出在服务器上,而不是你电脑上的Python脚本。

检查一下你的服务器代码,可能是它只从GET请求中读取数据,而不是从POST请求中。

撰写回答