以下是我的代码片段。我正在尝试使用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());
感谢您的帮助。
答案 0 :(得分:7)
如果HTTP服务认为您发送了无效/不正确/不合适,则会发送400响应。无法从您的代码中判断出发送的实际参数是什么,或者(更重要的)服务器期望您发送的内容。
要诊断这一点,您需要:
第二种可能涉及:
在这种情况下,看起来需要提供额外的token
参数。
但是,我怀疑你可能完全采取了错误的做法。 “identi.ca”站点使用StatusNet,其中有两个published APIs用于客户端。没有提及与我能看到的“登录”URL进行交谈。
答案 1 :(得分:6)
查看该登录页面的来源,有一个名为token
的隐藏字段,您可能需要返回服务器。您需要首先获取该页面的内容,提取令牌值,并将其包含在POST响应中。
答案 2 :(得分:0)
尽管我知道正确的答案已被标出,但还是想给路过的其他人一些视野。就我而言,这就是导致错误请求的原因
form.add(new BasicNameValuePair("return_url", "https://myexample.example.com/#/providermanageger?vi={VERIFICATION_INTENT_ID}"));
我移除了/#/providermanageger
它开始起作用。因此,请反复尝试。