2012-02-29 4 views
1

Мне нужно программно загрузить CSV-файл из Google. Поскольку для этого требуется аутентификация, я использовал clientLogin для получения идентификатора сеанса.Передача sessionId, полученная от одного ответа к следующему запросу

Как загрузить файл, передав идентификатор сеанса в качестве файла cookie?

Я попытался использовать новый объект URLConnection и установить cookie в методе setRequestParameter, надеясь, что он будет аутентифицировать мой логин, но, похоже, он не работает. У меня такое чувство, что я не должен использовать два отдельных соединения, это правда?

Если да, то как передать идентификатор сессии в качестве параметра при загрузке файла? Я также попытался использовать то же соединение, это тоже не сработало. Пожалуйста помоги.

try { 
    URL url1 = new URL("https://www.google.com/accounts/ClientLogin?accountType=GOOGLE&Email=*******.com&Passwd=*****&service=trendspro&source=test-test-v1"); 
    URL url2 = new URL("http://www.google.com/insights/search/overviewReport?cat=0-7&geo=BR&cmpt=geo&content=1&export=1"); 
    URLConnection conn = url1.openConnection(); 

    // fake request coming from browser 
    conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11"); 
    BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8")); 
    String f = in.readLine(); 
    // obtaining the sid. 
    String sid=f.substring(4); 
    System.out.println(sid); 

    URLConnection conn2 = url2.openConnection(); 
    conn2.setRequestProperty("Cookie", sid); 
    BufferedInputStream i= new BufferedInputStream(conn2.getInputStream()); 
    FileOutputStream fos = new FileOutputStream("f:/testplans.csv"); 
    BufferedOutputStream bout = new BufferedOutputStream(fos,1024); 
    byte data[] = new byte[1024]; 

    while(i.read(data,0,1024)>=0) { 
    bout.write(data); 
    } 
    bout.close(); 
    in.close(); 
} 
+0

Пожалуйста, добавьте результаты, которые вы получите в консоли; например, что означает 'System.out.println (sid);' display? – foch

ответ

0

Попробуйте следующее: link. Проверьте верный ответ: они не используют SID, но Auth.

Если он работает в Google Reader, он, вероятно, будет работать и для Google Insights.

+0

хорошо ... но я до сих пор неясно, может ли u использовать тот же объект urlConnection или нет ... любые указатели на это? –

Смежные вопросы