【问题标题】:Expect HTTP status 301 but always got status 200 from HttpURLConnection's getResponseCode()期望 HTTP 状态 301 但总是从 HttpURLConnection 的 getResponseCode() 获得状态 200
【发布时间】:2016-04-04 15:20:48
【问题描述】:

在向安全 URL 发送 HTTP POST 请求并接收到状态代码后,我的应用程序需要决定是输出响应还是在重定向的情况下向标头“Location”中指定的 URL 发送 HTTP GET 请求.

这适用于登录页面的至少一个 URL,该页面返回 HTTP 状态代码 302 和重定向位置信息到其主页。然后我的应用程序在主页位置执行 GET。到目前为止一切顺利。

然而,在向另一个登录页面的这个有问题的 URL 发送 POST 请求时,我总是从 getResponseCode() 返回 HTTP 200,并将登录页面本身作为内容结果。 POST 请求发送时包含正确的登录信息,服务器响应为 301,至少我可以使用 Firefox 浏览器的插件 (RESTClient) 进行检查。

使用 RESTClient 插件,我可以按预期返回 HTTP 301 和响应正文(主页)。以下是我使用 RESTClient 测试时得到的响应标头:

状态代码:301 永久移动缓存控制:私有 内容长度:62718 内容类型:文本/html; charset=utf-8 日期: 2015 年 12 月 30 日星期三 15:40:57 GMT 服务器:Microsoft-IIS/7.5 Set-Cookie: osVisit=55754609-0612-4846-97af-8b7dff36b56e;到期=2015 年 12 月 30 日,星期三 格林威治标准时间 16:10:56;路径=/; HttpOnly pageLoadedFromBrowserCache=false; path=/ X-AspNet-Version: 4.0.30319 X-Powered-By: ASP.NET X-UA 兼容:IE=edge,chrome=1

有人知道这里发生了什么吗?

【问题讨论】:

    标签: httpurlconnection http-status-code-301


    【解决方案1】:

    @马林,

    如果您想要自动跟随重定向,您需要通过设置 followRedirects (setFollowRedirects(true)) 或 instanceFollowRedirects (setInstanceFollowRedirects(true)) 来告诉 UrlConnection。否则帖子会自动重定向,你会得到 http 200。

    希望这会有所帮助,
    伊瓦尔

    【讨论】:

    • 我试过了 - settng setInstanceFollowRedirects,真假,只是为了检查效果,但根本没有效果 - 我仍然为 POST 登录获得 200 OK。事实上,我认为问题出在其他地方,因为如果我必须调用 setInstanceFollowRedirects,那么我希望其他 POST 登录在没有设置的情况下无法工作,但确实如此。我只是还不知道问题出在哪里。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-22
    • 2012-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多