我正在创建一个SublimeText 2插件,用于将数据发布到我运行的服务器上。我在火车上用手机作为WiFi热点写了基础知识,一切正常。然后,当我回到家时,无论我试图发布什么,我的服务器都收到了400 Bad Request响应。我把笔记本电脑放回个人热点,错误就消失了。以下是详细信息:
在这种情况下,“客户端”是Sublime Text 2.如果您还不知道,他们的插件是用Python编写的,我使用urllib,urllib2和httplib来处理请求。以下是发出请求的相关Python:
params = urllib.urlencode({'title': 'ST2 Note', 'content': data, 'user': user, 'pass': pswd})
headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"}
conn = httplib.HTTPConnection("staging.myserver.me:80")
conn.request("POST", "staging.myserver.me/st2", params, headers)
response = conn.getresponse()
data2 = response.read()
print data2
conn.close()
上面的代码发送POST请求就好了。如果我在某个连接上,我的服务器肯定会理解它,因为我将它设置为回显我在POST数据中发送的内容。请求是PHP(Codeigniter)应用程序的一部分,是的,我已经专门设置了这个特定URL的CSRF保护,所以我知道这不是问题。 PHP代码本身相当无趣,但我将其设置为回显服务器标头,这是我从连接起作用时发送的内容:
Host: staging.myserver.me
Accept-Encoding: identity
Content-Length: 56
Content-type: application/x-www-form-urlencoded
Accept: text/plain
Via: HTTP/1.1 akrmspsrvz9ts212.wnsnet.attws.com
为什么服务器理解来自某些连接而不是其他连接的请求的任何想法?
答案 0 :(得分:1)
看起来我让它运转了。我知道还有其他问题,所以这里发生的事情......
由于我太过于理解Python / HTTP1.1新手的原因,在它前面没有“http://”的计划主机名工作一些。必须与ISP有关,以及它们如何路由流量,不确定。所以修复就是修改这一行:
conn.request("POST", "staging.myserver.me/st2", params, headers)
以上一行造成了问题。但改变它:
conn.request("POST", "http://staging.myserver.me/st2", params, headers)
让它立即发挥作用!我希望这可以帮助某人下线。 400错误几乎和500错误一样神秘。