1

我是 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”,但都没有奏效。

4

2 回答 2

2

首先尝试使用此 url 登录(首先将 url 复制到 textpad 或其他东西 - 然后编辑它):

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);
   }
于 2012-03-01T03:07:38.917 回答
0

您是否设置了 User-Agent 归档?像这样:

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来跟踪网络进程,并逐步emu它们。应该可以的。

网站检查一些字段,我认为这肯定是原因。

于 2012-03-02T01:47:17.803 回答