为什么我收到Http/1.1 400 Bad请求?

cha*_*kya 9 java http httpclient

这是我的代码片段.我正在尝试使用HTTPOST登录该网站.我一直得到"400 Bad Request"我尝试了各种组合.我尝试将用户名/密码作为标题而不是NameValuePair传递.但结果相同.有什么我想念的吗?

HttpClient httpclient = new DefaultHttpClient();

HttpPost post = new HttpPost("https://identi.ca/main/login");


List <NameValuePair> nvps = new ArrayList <NameValuePair>();
nvps.add(new BasicNameValuePair("nickname", u));
nvps.add(new BasicNameValuePair("password", p));
nvps.add(new BasicNameValuePair("submit", "Login"));

post.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));

HttpResponse response = httpclient.execute(post);
HttpEntity entity = response.getEntity();

Log.i("Login form POST result: ", response.getStatusLine().toString());
Run Code Online (Sandbox Code Playgroud)

感谢帮助.

Ste*_*n C 8

如果HTTP服务认为您发送了无效/不正确/不合适,则会发送400响应.无法从您的代码中判断出发送的实际参数是什么,或者(更重要的)服务器期望您发送的内容.

要诊断这一点,您需要:

  • 找出你的代码实际发送的内容,以及
  • 找出服务器期望您发送的内容.

第二个可能涉及:

  • 查看具有Web浏览器的普通用户用于发出请求的网页,
  • 查看从服务器获取的400响应的正文,
  • 查看服务器日志和/或
  • 查看服务器的Web API文档(或源代码).

在这种情况下,看起来token需要提供额外的参数.

但是,我怀疑你可能完全采取了错误的做法."identi.ca"站点使用StatusNet,它为客户端提供了几个已发布的API.没有提到我可以看到的"登录"URL.


Gre*_*ill 6

查看该登录页面的源代码,有一个隐藏字段token,您可能需要返回服务器.您需要首先获取该页面的内容,提取令牌值,并将其包含在POST响应中.