谷歌日历身份验证错误
本文关键字:错误 身份验证 日历 谷歌 | 更新日期: 2023-09-27 18:35:56
我正在尝试通过最新的Google Data API SDK更新Google日历。
我下面的示例代码如下:
string sGoogleUserName = "xxxx@gmail.com";
string sGooglePassword = "xxxxxxxx";
Uri oCalendarUri = new Uri("http://www.google.com/calendar/feeds/" +
sGoogleUserName + "/private/full");
//Initialize Calendar Service
CalendarService oCalendarService = new CalendarService("CalendarSampleApp");
oCalendarService.setUserCredentials(sGoogleUserName, sGooglePassword);
//Use Proxy
GDataRequestFactory oRequestFactory =
(GDataRequestFactory)oCalendarService.RequestFactory;
WebProxy oWebProxy = new WebProxy(
WebRequest.DefaultWebProxy.GetProxy(oCalendarUri));
oWebProxy.Credentials = CredentialCache.DefaultCredentials;
oWebProxy.UseDefaultCredentials = true;
oRequestFactory.Proxy = oWebProxy;
//Set Event Entry
EventEntry oEventEntry = new EventEntry();
oEventEntry.Title.Text = "Test Calendar Entry From .Net";
oEventEntry.Content.Content =
"Hurrah!!! I posted my first Google calendar event through .Net";
//Set Event Location
Where oEventLocation = new Where();
oEventLocation.ValueString = "New Zealand";
oEventEntry.Locations.Add(oEventLocation);
//Set Event Time
When oEventTime = new When(new DateTime(2011, 5, 31, 9, 0, 0),
new DateTime(2011, 5, 31, 9, 0, 0).AddHours(1));
oEventEntry.Times.Add(oEventTime);
//Set Additional Properties
ExtendedProperty oExtendedProperty = new ExtendedProperty();
oExtendedProperty.Name = "SynchronizationID";
oExtendedProperty.Value = Guid.NewGuid().ToString();
oEventEntry.ExtensionElements.Add(oExtendedProperty);
// CalendarService oCalendarService = GAuthenticate();
//Prevents This Error
//{"The remote server returned an error: (417) Expectation failed."}
System.Net.ServicePointManager.Expect100Continue = false;
//Save Event
oCalendarService.Insert(oCalendarUri, oEventEntry);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
这是下面的错误
Google.GData.Client.GDataRequestException: Execution of Authentication 请求返回意外结果:405 at Google.GData.Client.Utilities.getAuthException(TokenCollection tokens, HttpWebResponse response) at Google.GData.Client.Utilities.QueryClientLoginToken(GDataCredentials gc, 字符串服务名称, 字符串应用程序名称, 布尔值 fUseKeepAlive, IWebProxy proxyServer, Uri clientLoginHandler) at Google.GData.Client.GDataGAuthRequest.QueryAuthToken(GDataCredentials gc) at Google.GData.Client.GDataGAuthRequest.EnsureCredentials() at Google.GData.Client.GDataRequest.EnsureWebRequest() at Google.GData.Client.GDataGAuthRequest.EnsureWebRequest() at Google.GData.Client.GDataGAuthRequest.CopyRequestData() at Google.GData.Client.GDataGAuthRequest.Execute(Int32 retryCounter) at Google.GData.Client.GDataGAuthRequest.Execute() at Google.GData.Client.Service.EntrySend(Uri feedUri, AtomBase baseEntry, GDataRequestType type, AsyncSendData data) at Google.GData.Client.Service.Insert(Uri feedUri, AtomEntry newEntry, AsyncSendData data) at Google.GData.Client.Service.Insert[TEntry](Uri feedUri, TEntry entry)
我今天遇到了这个,使用了我在网上某处找到的相同示例代码。
通过一些测试,我发现如果我设置一个 HTTP 代理(我使用的是 Charles,但其他常见的是 Fiddler 等),它会起作用,但如果我尝试没有代理,它就不起作用。
凭直觉,我像这样注释掉了//Use Proxy 下的内容,它奏效了:
string googleUserName = "falagard@gmail.com";
string googlePassword = "winnie";
Uri calendarUri = GetGoogleCalendarUri();
//Initialize Calendar Service
CalendarService service = new CalendarService("AIConsole");
service.setUserCredentials(googleUserName, googlePassword);
//Use Proxy - NOTE COMMENTED THIS PART OUT
//GDataRequestFactory requestFactory = (GDataRequestFactory)service.RequestFactory;
//WebProxy proxy = new WebProxy(WebRequest.DefaultWebProxy.GetProxy(calendarUri));
//proxy.Credentials = CredentialCache.DefaultCredentials;
//proxy.UseDefaultCredentials = true;
//requestFactory.Proxy = proxy;
在那之后,它就像一个魅力。
版本 3.5.12 重试。 也许您在代理后面,需要设置首先使用正确的代理设置