Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Работа с сетью > Send cookie


Автор: icepro 1.3.2012, 02:07
Привет.

Делаю обертку для Google RSS Reader.
Но застрял на одно месте, получаю ошибку от гугла - Server returned HTTP response code: 401 for URL: http://www.google.com/reader/api/0/token

Похоже на то что приложение не отправляет кук.

Подскажите как побороть.

Заранее спасибо.

Вот код:
Код

package ice.wrappers.google.rss.session;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.StringTokenizer;

/**
 * User: ICE
 * Date: 26.02.12
 * Time: 22:04
 */

public class Session {

    private Credentials credentials = null;
    private String RSS_CLIENT_LOGIN_PATH = "https://www.google.com/accounts/ClientLogin?service=reader";

    public Session() {}

    public Session(Credentials cred) {
        credentials = cred;
    }

    public void setCredentials(Credentials cred) {
        credentials = cred;
    }

    public void connect() throws Exception {
        String sid = getSID();
        System.out.println("SID=" + sid);
        String token = getToken(sid);
        System.out.print("Token=" + token);
    }

    private String getSID() throws Exception {
        StringBuilder path = new StringBuilder(RSS_CLIENT_LOGIN_PATH);
        path.append("&Email=").append(credentials.getUserName());
        path.append("&Passwd=").append(credentials.getUserPassword());

        URLConnection conn = (new URL(path.toString())).openConnection();
        BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        StringBuilder result = new StringBuilder();
        String line;
        while ((line = reader.readLine()) != null) {
            result.append(line);
        }
        reader.close();
        StringTokenizer tokenizer = new StringTokenizer(result.toString(), "=");
        while (tokenizer.hasMoreElements()) {
            if(tokenizer.nextElement().toString().equals("SID")) {
                return tokenizer.nextElement().toString();
            }
        }
        return null;
    }
    
    private String getToken(String sid) throws Exception {
        StringBuilder cookie = new StringBuilder();
        cookie.append("Name=SID;").append("Value=").append(sid).append(";");
        cookie.append("Path=/;").append("Domain=.google.com");

        URLConnection conn = (new URL("http://www.google.com/reader/api/0/token")).openConnection();
        conn.setRequestProperty("Cookie", cookie.toString());
        conn.connect();

        BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        StringBuilder result = new StringBuilder();
        String line;
        while ((line = reader.readLine()) != null) {
            result.append(line);
        }
        reader.close();
        return result.toString();
    }
}


Автор: jk1 1.3.2012, 10:47
Попробуйте поставить сниффер и проверить, действительно ли cookie отсутствует в запросе. Опознать его можно по заголовку вида Cookie: name=value

Автор: icepro 2.3.2012, 01:21
посоветуйте пожалуйста сниффер которым это можно отследить.
фиддлер - не видит приложение вообще
Wireshark - отображает не то что мне нужно.

Спасибо.

Автор: LSD 2.3.2012, 12:10
Попробуй http://www.charlesproxy.com/.

Автор: icepro 6.3.2012, 02:24
проблему решил jsoup

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)