发现HTTP / 1.1 302 - 在httpPost之后的Android中

时间:2011-08-02 13:40:41

标签: java asp.net android http httpclient

在服务器上执行post方法后,我收到此错误:HTTP / 1.1 302 Found,据我所知,后面有一个重定向。我正在尝试填写登录表单并将其发布到服务器,在这样做之后,我得到了这个重定向。

P.S。表单提交方法是回发..也许这是一个关键?

P.P.S。发布后:

__VIEWSTATE=&__EVENTTARGET=&__EVENTARGUMENT=&ctl00$tbUsername=qwerty&ctl00$tbPwd=qwerty&ctl00$chkRememberLogin=0&ctl00$cmdLogin=Login&ctl00$cmdForgetMe=Forget Me

我明白了:

<html><head><title>Object moved</title></head><body>
<h2>Object moved to <a href="http://website/mobile/(X(1)S(lyslolvcdq13af45juum2vel))/Login.aspx?ReturnUrl=%2fsyspower3%2fmobile%2fdefault.aspx&amp;AspxAutoDetectCookieSupport=1">here</a>.</h2>
</body></html>

加上标题集:

08-02 13:48:39.084: INFO/System.out(1853): ====Header=====
08-02 13:48:39.084: INFO/System.out(1853): Cache-Control
08-02 13:48:39.084: INFO/System.out(1853): private
08-02 13:48:39.084: INFO/System.out(1853): ====Header=====
08-02 13:48:39.084: INFO/System.out(1853): Content-Type
08-02 13:48:39.084: INFO/System.out(1853): text/html; charset=utf-8
08-02 13:48:39.093: INFO/System.out(1853): ====Header=====
08-02 13:48:39.093: INFO/System.out(1853): Expires
08-02 13:48:39.093: INFO/System.out(1853): Tue, 02 Aug 2011 13:48:33 GMT
08-02 13:48:39.093: INFO/System.out(1853): ====Header=====
08-02 13:48:39.093: INFO/System.out(1853): Server
08-02 13:48:39.093: INFO/System.out(1853): Microsoft-IIS/7.5
08-02 13:48:39.093: INFO/System.out(1853): ====Header=====
08-02 13:48:39.093: INFO/System.out(1853): Set-Cookie
08-02 13:48:39.093: INFO/System.out(1853): ASP.NET_SessionId=ebmsrf45wb3mcq45qrgrfe55; path=/; HttpOnly
08-02 13:48:39.093: INFO/System.out(1853): ====Header=====
08-02 13:48:39.104: INFO/System.out(1853): X-AspNet-Version
08-02 13:48:39.104: INFO/System.out(1853): 2.0.50727
08-02 13:48:39.104: INFO/System.out(1853): ====Header=====
08-02 13:48:39.104: INFO/System.out(1853): X-Powered-By
08-02 13:48:39.104: INFO/System.out(1853): ASP.NET
08-02 13:48:39.104: INFO/System.out(1853): ====Header=====
08-02 13:48:39.104: INFO/System.out(1853): Date
08-02 13:48:39.104: INFO/System.out(1853): Tue, 02 Aug 2011 13:48:33 GMT
08-02 13:48:39.104: INFO/System.out(1853): ====Header=====
08-02 13:48:39.104: INFO/System.out(1853): Content-Length
08-02 13:48:39.104: INFO/System.out(1853): 1272

EDITED : 现在我可以看到我必须前往的新位置。但是这是一个新问题,当我将这个新链接输入浏览器时,我进入服务器(我通过登录),但如果我向服务器发出新请求(POST),那么我将被抛回登录页...

P.S。现在我正在使用 HttpURLConnection 作为post方法

2 个答案:

答案 0 :(得分:2)

这不是错误。这只是一个非正式的消息,有一个重定向。只有HTTP 4nn和5nn响应才是真正的错误。 HTTP Location标头中提供了重定向URL。您作为Web客户端,有义务按照HTTP Location标头中的指定在URL上发送新的GET请求。

String location = response.getLastHeader("Location").getValue();
// ...

更新:那么,您收到的HTTP 302响应没有Location标头?响应本身的状态代码是什么?

int statusCode = response.getStatusLine().getStatusCode();

如果这是200并且正文包含302消息,那么它肯定是服务器端的错误。网络服务器应该返回状态代码302以及Location标头。


更新2 :所以,状态代码实际上是200.这是服务器端的一个错误。如果该网站不在您的控制之下,因此您无法修复服务器,则需要将其报告给网站的管理员/维护者。同时,最好的办法是使用一些HTML解析器从响应主体中提取新位置,然后在其上发送新的GET请求。例如,使用Jsoup

String location = Jsoup.parse(responseHtml).select("h2 a").first().attr("href");
// ...

答案 1 :(得分:0)

代码302不被视为错误。它是对客户端的指令,它应该继续到Location响应头指定的位置。客户应遵循该指令并前往指定的位置。

由于此服务器未返回Location,因此您似乎必须解析响应正文并按照其中指定的URL进行操作。