1

したがって、ApacheのHttpClient v.4を使用してWebサイト(この例ではmyspace)にログインしようとしていますが、プロセスのどこが間違っているのかわかりません。このコードをテストすると、ログイン後のCookieは最初のログインCookieですが、そうではありません。

私は他の誰かが試したかどうかを確認するためにオンラインで周りを見回しましたが、私のために働いている良いリソースを見つけられませんでした。

私はこの例を使用しています: Facebookにアクセスするためのapache HttpClient(Facebook)

 try{
        DefaultHttpClient httpclient = new DefaultHttpClient();

        HttpGet httpget = new HttpGet("http://www.myspace.com/auth/form");

        HttpResponse response = httpclient.execute(httpget);
        HttpEntity entity = response.getEntity();

        System.out.println("Login form get: " + response.getStatusLine());
        if (entity != null) {
            entity.consumeContent();
        }
        System.out.println("Initial set of cookies:");
        List<Cookie> cookies = httpclient.getCookieStore().getCookies();
        if (cookies.isEmpty()) {
            System.out.println("None");
        } else {
            for (int i = 0; i < cookies.size(); i++) {
                System.out.println("- " + cookies.get(i).toString());
            }
        }

        HttpPost httpost = new HttpPost("http://www.myspace.com/auth/form");

        List <NameValuePair> nvps = new ArrayList <NameValuePair>();
        nvps.add(new BasicNameValuePair("email", "someEmail"));
        nvps.add(new BasicNameValuePair("password", "somePassword"));

        httpost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));

        response = httpclient.execute(httpost);
        entity = response.getEntity();
        //System.out.println("Double check we've got right page " + EntityUtils.toString(entity));

        System.out.println("Login form get: " + response.getStatusLine());
        if (entity != null) {
            entity.consumeContent();
        }

        System.out.println("Post logon cookies:");
        cookies = httpclient.getCookieStore().getCookies();
        if (cookies.isEmpty()) {
            System.out.println("None");
        } else {
            for (int i = 0; i < cookies.size(); i++) {
                System.out.println("- " + cookies.get(i).toString());
            }
        }
        httpclient.getConnectionManager().shutdown();
    }
    catch(Exception e){e.printStackTrace();}

クッキーの例:

    [version: 0][name: MSCOUNTRY][value: US][domain: .myspace.com][path: /][expiry: Tue Jun 12 23:22:15 EDT 2012]
[version: 0][name: MSCulture][value: IP=XXX.XXX.XXXX&IPCulture=en-US&PreferredCulture=en-US&PreferredCulturePending=&Country=VVM=&ForcedExpiration=0&timeZone=0&myStuffDma=&myStuffMarket=&USRLOC=RandomUserLocString==&UserFirstVisit=1][domain: .myspace.com][path: /][expiry: Tue Jun 12 23:22:15 EDT 2012]
[version: 0][name: SessionDDF2][value: RandomStringHere==][domain: .myspace.com][path: /][expiry: Sat Jun 05 23:22:15 EDT 2032]
4

2 に答える 2

1

最初のCookieと投稿のCookieが異なる必要があるのはなぜだと思いますか?アプリケーションサーバー側は一連のCookieをクライアントに割り当て、通常はセッション全体で同じままです。

アプリケーションサーバーは、セッションに関連付けられた一連の属性を関連付けます(Cookieをルックアップとして使用します)。これにより、セッションが「ログイン」されているかどうかが決まります。

于 2012-06-06T01:25:17.187 に答える
0

ここで言及されていないことの1つは、認証済みを正常に開くには、認証後に受け取ったCookieを:URLConnectionで設定する必要があるということです 。URLConnection

    URL myUrl = new URL("http://yourdomain/your/page);

    URLConnection urlConn = myUrl.openConnection();

    for (int i = 0; i < cookies.size(); i++) {
        System.out.println("- " + cookies.get(i).toString());
        urlConn.setRequestProperty("Cookie",cookies.get(i).getName() + "=" + cookies.get(i).getValue());
    }
    urlConn.connect();

    InputStream io = (InputStream) urlConn.getContent();


    // print out the response
    List<String> readLines = IOUtils.readLines(io);

    for (String line : readLines) {
        System.out.println (line);
    }
于 2013-03-12T23:45:41.460 に答える