我正在尝试将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)
一种不同的方法,但做的工作。谢谢你的所有答案。
答案 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。