Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AndroidHttpClient期望响应代码302,但接收到200_Android_Http - Fatal编程技术网

AndroidHttpClient期望响应代码302,但接收到200

AndroidHttpClient期望响应代码302,但接收到200,android,http,Android,Http,我正在尝试使用Android应用程序登录https网站。如果登录成功,网站将返回302响应代码;如果登录失败,网站将返回200响应代码。我已经研究了如何使用AndroidHttpClient并查看了一些示例,但是我还没有看到我的代码和他们的代码之间的任何差异。无论我发送给网站的用户名和密码是什么,我都会得到200的回复码——即使组合正确。由于网站使用安全http,我是否必须做一些特殊的事情?这是我的密码。我真的很感谢你的帮助 public void login(String url, Strin

我正在尝试使用Android应用程序登录https网站。如果登录成功,网站将返回302响应代码;如果登录失败,网站将返回200响应代码。我已经研究了如何使用AndroidHttpClient并查看了一些示例,但是我还没有看到我的代码和他们的代码之间的任何差异。无论我发送给网站的用户名和密码是什么,我都会得到200的回复码——即使组合正确。由于网站使用安全http,我是否必须做一些特殊的事情?这是我的密码。我真的很感谢你的帮助

public void login(String url, String username, String password){
  CookieStore cookieStore;
  HttpContext httpContext;
  HttpGet httpGet;
  HttpResponse httpResponse;
  HttpPost post;
  AndroidHttpClient httpClient;

  cookieStore = new BasicCookieStore();
  httpContext = new BasicHttpContext();
  httpContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
  httpClient = AndroidHttpClient.newInstance("Android");
  List<NameValuePair> params = new ArrayList<NameValuePair>();
  params.add(new BasicNameValuePair("name", username));
  params.add(new BasicNameValuePair("pass", password));
  params.add(new BasicNameValuePair("form_id", "user_login"));

  httpGet = new HttpGet(url); 
  post = new HttpPost(url);
  try {
    post.setEntity(new UrlEncodedFormEntity(list, HTTP.UTF_8));
    httpResponse = httpClient.execute(httpGet, httpContext);
  } catch (ClientProtocolException e) {
    e.printStackTrace();
  } catch (IOException e) {
    e.printStackTrace();
  }
   Log.i("My App", httpResponse.getStatusLine().getStatusCode());
}
公共无效登录(字符串url、字符串用户名、字符串密码){
CookieStore CookieStore;
HttpContext HttpContext;
HttpGet-HttpGet;
HttpResponse HttpResponse;
HttpPost;
AndroidHttpClient httpClient;
cookieStore=新的BasicCookieStore();
httpContext=新的BasicHttpContext();
setAttribute(ClientContext.COOKIE_存储,cookieStore);
httpClient=AndroidHttpClient.newInstance(“Android”);
List params=new ArrayList();
添加(新的BasicNameValuePair(“名称”,用户名));
参数add(新的BasicNameValuePair(“pass”,password));
添加(新的BasicNameValuePair(“表单id”、“用户登录”);
httpGet=新的httpGet(url);
post=新的HttpPost(url);
试一试{
setEntity(新的UrlEncodedFormEntity(列表,HTTP.UTF_8));
httpResponse=httpClient.execute(httpGet,httpContext);
}捕获(客户端协议例外e){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
Log.i(“我的应用程序”,httpResponse.getStatusLine().getStatusCode());
}

您应该使用POST而不是GET,因为GET将自动处理重定向,但是:

如果302状态代码是响应GET或HEAD以外的请求而接收的,则除非用户能够确认,否则用户代理不得自动重定向请求,因为这可能会改变发出请求的条件

参考:

编辑:在进一步检查时,看起来KVP被传递到
HttpPost
中,但是
HttpGet
被用于请求,因此用户名/密码根本不会被传递到服务器


有时,过度思考确实会使人朝着正确的方向前进,尽管HTTP连接成功时响应代码为200,但它不会检查您是否登录。因此,如果您的连接成功,它将只返回200。这个特定的站点是否会重定向到登录页面,而不是返回302?(相关:)@Lalit Poptani你知道为什么我使用javax.net.ssl.HttpsURLConnection时它会给我一个响应代码302吗?另外,我很确定当我收到200条回复时,我不会得到一个cookie来登录。这就像它只是忽略登录请求而只是调出登录页面一样。@mootinator我实际上是在将登录请求发送到登录页面,因此它不会重定向。如果您在输入错误凭据时被重定向回登录页面,而不是得到错误页面,这是一样的,不是droid或java开发人员,但我是这样做的:
httpGet=newhttpget(url)
httpResponse=httpClient.execute(httpGet,httpContext)
(并且不要在请求中使用
post
变量。)哦,哇,你说得对!哈哈,我在网上看了这么多的例子,我一定是把不同的部分混在一起了,用get而不是post。非常感谢你!