1

http プログラミングは初めてで、API を使用しない Web サイトに対して認証しようとしていますが、問題が発生しています。私と似ていると思われる他のいくつかの質問を見つけましたが、私に合った答えはありませんでした.

私はいくつかの異なるアプローチを試しましたが、まだ機能するものを見つけていません。実際、私は一度それを機能させましたが、そのコードをチェックインしませんでした (私は知っています - 私は何を考えていましたか?)。私は再びその作業バージョンに戻ることができませんでした。これまでに試したいくつかのことを次に示します。

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

この時点で、Web サイトから返される「エンティティ」は「エラー」:「不正アクセス」です。

「Credentials」インスタンスが HttpClient に渡されており、ユーザー名とパスワードも HttpPost エンティティに入れていることがわかります。これらのアプローチをそれぞれ個別に試してみましたが、どちらも「エラー」:「不正アクセス」を返しました。結果。

シングルスレッド接続マネージャーを使用する DefaultHttpClient と「ThreadSafeClientConnManager」を試しましたが、どちらも機能しませんでした。

4

2 に答える 2

2

最初にこのURLを使用してログインしてみてください(最初にURLをテキストパッドなどにコピーしてから編集してください):

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 などのツールを使用してネットワーク プロセスを追跡し、それらを段階的にエミュレートする必要があります。

ウェブサイトはいくつかのフィールドをチェックしますが、これが間違いなく理由だと思います。

于 2012-03-02T01:47:17.803 に答える