使用HttpClient从outlook.com下载ICS文件时遭遇302重定向至错误页面的问题求助
使用HttpClient从outlook.com下载ICS文件时遭遇302重定向至错误页面的问题求助
各位好,我最近卡在了一个棘手的问题上:想用HttpClient从outlook.com下载日历ICS文件,但无论怎么尝试,Outlook都会返回HTTP 302状态码,重定向到一个OWA错误页面,提示“我的浏览器不被支持”。但用Edge、Safari这类浏览器直接访问ICS链接完全正常,这说明肯定是我在请求里漏掉了什么关键配置!
我已经把浏览器请求里的各种头信息都加到代码里了,甚至都有点病急乱投医了,还是没解决问题。先给大家看看我的代码和具体情况:
var iCal_Url = "https://outlook.live.com/owa/calendar/00000000-0000-0000-0000-000000000000/c8f7ad62-8337-47f3-be26-652c182b58c2/cid-B505A4E6E6934159/calendar.ics"; using var http = new HttpClient(new HttpClientHandler { AllowAutoRedirect = false, MaxAutomaticRedirections = 10 }); http.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0"); http.DefaultRequestHeaders.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"); http.DefaultRequestHeaders.Add("upgrade-insecure-requests", "1"); http.DefaultRequestHeaders.Add("sec-ch-ua", "\"Not;A=Brand\";v=\"99\", \"Microsoft Edge\";v=\"139\", \"Chromium\";v=\"139\""); http.DefaultRequestHeaders.Add("sec-ch-ua-mobile", "?0"); http.DefaultRequestHeaders.Add("sec-ch-ua-platform", "\"Windows\""); http.DefaultRequestHeaders.Add("sec-ch-ua-platform-version", "\"15.0.0\""); // TEST 1 //icsData = await response.Content.ReadAsStringAsync(); // TEST 2 //using (var s = await http.GetStreamAsync(iCal_Url)) //{ // using (var fs = new FileStream("c:\\temp\\data2.txt", FileMode.CreateNew)) // { // await s.CopyToAsync(fs); // } //} // TEST 3 var response = await http.GetAsync(iCal_Url); var content = await response.Content.ReadAsByteArrayAsync(); await System.IO.File.WriteAllBytesAsync("c:\\temp\\data.txt", content);
目前的具体表现:
- 我设置了
AllowAutoRedirect = false,直接拿到302响应,响应头里的Location指向/owa/auth/errorfe.aspx?httpCode=500&msg=... - 我也试过开启自动重定向,甚至自己写了逻辑手动跟进重定向,但最终拿到的都是错误页面,根本下载不到ICS文件
有没有大佬能帮我看看,到底是哪里没做对?是不是还有什么关键的请求头没加,或者Outlook还有其他验证机制我没考虑到?
内容来源于stack exchange
相关产品推荐
相关产品推荐

