HTTP ERROR 411的一个可能原因
问题
在用Python模拟浏览器请求时遇到的问题。
主要是在模拟这个ajax请求:
$.ajax({
type: "post",
url: "/PointExchangeRoom/IsAnom",
datatype: "json",
async: false,
success: function (data) {
...
}
});
正常情况下就是发送一个不带data
的POST请求,比如:
import urllib.request
s = urllib.request.Request(url=url, headers=headers, method='POST')
con = urllib.request.urlopen(s)
但竟然意外得到的是411错误,真是从来没见过。
解决方法
Google了一下发现可能是服务器端没有找到headers中Content-Lengh这项,导致报错HTTP Error 411 – Length required。
然后尝试发送空data
,即:
import urllib.request
import urllib.parse
s = urllib.request.Request(url=url, data=urllib.parse.urlencode(
'').encode(), headers=headers, method='POST')
con = urllib.request.urlopen(s)
然后就一切都正常了。
奇怪为何ajax请求不包含data就没问题,urllib中不包含data就会报错。