我是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);
此时我从网站上回来的'实体'是“错误”:“未经授权的访问”。
你会注意到我有一个'Credentials'实例被传递给HttpClient而且我还要输入用户名& HttpPost实体中的密码。我分别尝试了这些方法,他们都返回了“错误”:“未经授权的访问”。结果
我已经尝试过DefaultHttpClient,它使用单线程连接管理器,以及'ThreadSafeClientConnManager',但都没有工作。
答案 0 :(得分:2)
首先尝试使用此网址登录(首先将网址复制到网页或其他内容 - 然后进行编辑):
https://www.centraldispatch.com/login?uri=%2Fprotected%2F&Username=XXX&Password=YYY
只需将您的真实用户/通行证替换为XXX和YYY - 确保其有效。
然后使用:
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
nameValuePairs.add(new BasicNameValuePair("Username","Your username"));
nameValuePairs.add(new BasicNameValuePair("Password","Your password"));
post.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = client.execute(post);
BufferedReader rd = new BufferedReader(new InputStreamReader(
response.getEntity().getContent()));
String line = "";
while ((line = rd.readLine()) != null) {
System.out.println(line);
}
答案 1 :(得分:0)
您是否设置了用户代理?如此:
get.setHeader("Content-Type", "text/html");
get.setHeader("User-Agent","Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.0; .NET CLR 1.1.4322; .NET CLR 2.0.50215;)");
get.setHeader("Accept-Charset", Chareset+";q=0.7,*;q=0.7");//"utf-8;q=0.7,*;q=0.7");
也许你应首先获得登录页面,以使用cookie。
如果所有这些都不起作用,你可以使用firebug + firefox之类的工具来跟踪网络进程,并逐步进行操作。这应该可行。
网站检查某些字段,我认为这绝对是原因。