我是 http 编程的新手,我正在尝试对不使用 API 的网站进行身份验证,但遇到了一些麻烦。我发现了其他一些似乎与我相似的问题,但没有一个对我有用的答案。
我尝试了几种不同的方法,但还没有找到一种可行的方法。实际上,我曾经让它为我工作过,但没有签入该代码(我知道 - 我在想什么?)。我无法再次回到那个工作版本。以下是我到目前为止尝试过的一些事情:
HttpClient client = new DefaultHttpClient(); //or any method to get a client instance, with a 'threadsafe' connection manager or otherwise
Credentials credentials = new UsernamePasswordCredentials(userName, passwd);
((DefaultHttpClient) client).getCredentialsProvider()
.setCredentials(AuthScope.ANY, credentials);
// website is defined as my target website & this constitutes the valid login URL
HttpPost post = new HttpPost(https + website + "/login");
HttpEntity entity = new StringEntity("Username="+ userName +"&Password="+ passwd);
post.setEntity(entity);
HttpResponse response = client.execute(post);
EntityUtils.consume(entity);
entity = response.getEntity();
EntityUtils.consume(entity);
// the protected part of the site is over http after authentication succeeds
HttpGet get = new HttpGet(http + website +"/protected");
response = client.execute(get);
entity = response.getEntity();
String content = EntityUtils.toString(entity);
此时我从网站返回的“实体”是“错误”:“未经授权的访问”。
您会注意到我有一个“凭据”实例被传递给 HttpClient,并且我还将用户名和密码放在 HttpPost 实体中。我分别尝试了这些方法中的每一种,它们都返回了“错误”:“未经授权的访问”。结果。
我已经尝试过使用单线程连接管理器的 DefaultHttpClient 以及“ThreadSafeClientConnManager”,但都没有奏效。