Python POST无效
我正在尝试从一个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请求中。