1

我正在创建一个 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

为什么服务器理解来自某些连接的请求而不理解其他连接的任何想法?

4

1 回答 1

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 个错误一样神秘。

于 2013-01-09T15:39:16.970 回答