【问题标题】:Python POST not workingPython POST 不工作
【发布时间】:2012-03-03 01:28:42
【问题描述】:

我正在尝试将 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)

一种不同的方法,但可以完成工作。感谢您的所有回答。

【问题讨论】:

  • 你用什么来处理服务器端的请求?它是否需要尾部斜杠 / ?您的服务器是否向您提供任何反馈,说明为什么请求失败?

标签: python post urllib


【解决方案1】:

HTTP 500 错误表示问题不在客户端 python 脚本上,而是在服务器端。

检查你的服务器端代码,也许它只从 GET 读取数据,而不是 POST。

【讨论】:

  • 请查看问题中的编辑。我有 django 装饰器来处理 POST 和 GET 请求
  • 对不起,我对 django 很陌生,但我建议您打印(或记录)发布的数据。如果数据发布成功,那么一定是服务端代码。
【解决方案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)而不是标准输出。

【讨论】:

  • 它在访问服务器代码之前就给出了 500 个内部服务器错误。我已将代码放在上面,但我只是在服务器上得到 [10/Feb/2012 16:00:00] "POST /people/add HTTP/1.1" 500 57486
  • 我的演示代码将回溯发送到标准输出,您的 Django 服务器可能没有为日志捕获。尝试改用日志记录(编辑我的答案)。
  • 不,无论我将记录器放在服务器端脚本的哪个位置,它都不会在显示 500 服务器错误之前到达那里。
  • @Jimmy:那你的服务器根本不工作。这个问题与你的真正问题无关,即你的服务器代码被破坏了。
  • @S.Lott:但是当我通过浏览器访问它时,服务器工作正常。当我尝试使用问题中的 python 代码访问 POST 请求时,它只是不起作用。
猜你喜欢
  • 1970-01-01
  • 2015-11-21
  • 2014-05-07
  • 2012-04-12
  • 2017-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-06
相关资源
最近更新 更多