2011-04-04 175 views
7

这是我的代码片段。我正在尝试使用HTTPOST登录到网站。 我不断收到“400错误请求”我尝试了各种组合。我尝试传递用户名/密码作为标题而不是NameValuePair。但结果相同。 有什么我失踪?为什么我得到Http/1.1 400错误的请求?

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()); 

感谢您的帮助。

+2

您需要向我们显示请求。尝试从日志中获取它。 – Zepplock 2011-04-04 01:39:45

回答

7

如果HTTP服务认为您发送了无效/不正确/不适当的内容,它将发送400响应。无法从代码中知道发送的实际参数是什么,或者(更重要的是)服务器期望您发送的内容。

要诊断这一点,你将需要:

  • 找出你的代码实际上是发送和
  • 找出服务器期待你送。

第二可涉及:

  • 看网页(一个或多个),其与web浏览器的普通用户使用来进行请求,
  • 注视400响应的主体您正在查看服务器日志,和/或
  • 正在查看服务器的Web API文档(或源代码),从服务器获取

在这种情况下,它看起来像有一个额外的token参数需要被提供。

但是,我怀疑你可能完全采取了错误的做法。 “identi.ca”网站使用StatusNet,为客户提供几个published APIs。没有提及与我可以看到的“登录”URL。

+0

我同意“identi.ca”发布了API。我正在尝试导航网站并使用HTTP。 – chanakya 2011-04-08 06:19:12

6

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

+0

谢谢Greg。会让你知道那是怎么回事。 – chanakya 2011-04-08 06:19:42