Я на самом деле делал проект, который делал нечто подобное раньше, только он использовал Google Reader, хотя я предполагаю, что процесс авторизации Google такой же.
Прежде всего, для каждой пары ключ / значение в ответе, который вы получаете при входе в систему, вы должны превратить его в файл cookie.
string loginResponseText = new StreamReader(loginResponse.GetResponseStream()).ReadToEnd();
CookieContainer cookies = new CookieContainer();
foreach (string ln in loginResponseText.Split('\n'))
{
if (!ln.Contains("=")) continue;
string tId = ln.Substring(0, ln.IndexOf('=')).Trim();
string tVal = ln.Substring(ln.IndexOf('=') + 1).Trim();
cookies.Add(new Cookie(tId, tVal, "/", "www.google.com"));
}
Затем вы должны установить контейнер cookie для запроса, который вы делаете.
string url = string.Format("http://spreadsheets.google.com/feeds/download/spreadsheets/Export?key={0}&fmcmd=4", documentID);
HttpWebRequest rqForFile = (HttpWebRequest)WebRequest.Create(url);
rqForFile.CookieContainer = cookies;
WebResponse respForFile = rUnread.GetResponse();
Наслаждайтесь!
РЕДАКТИРОВАТЬ : как декодировать возвращенный HTML!
Вам необходимо использовать Regex для анализа URL, а затем использовать метод для его HTML-декодирования.
К счастью для нас, Microsoft предоставляет один в System.Web. Просто добавьте ссылку на него в ваш проект.
Обязательно добавьте с помощью System.Text.RegularExpressions в начало вашего файла!
Match m = Regex.Match("content=\"0; url='(.+)'");
if (!m.Success) throw new Exception(); // Or some other method of making sure the result is okay.
string finalurl = m.Groups[1].ToString();
finalurl = System.Web.HttpUtility.HtmlDecode(finalurl);
Тогда просто загрузите finalurl, используя ваш CookieContianer!
(Это не проверено, но должно работать!)