【问题标题】:400 Bad Request using Google c# API使用 Google c# API 的 400 错误请求
【发布时间】:2013-11-29 12:09:30
【问题描述】:

我在运行 c# google api 时收到 400 bad request 错误。我知道它最终是因为 API 构建了一个查询字符串并且查询字符串的长度很长。如何强制 API 发布而不是 GET?

我的代码:

        string username = "SAMPLE@SAMPLE.COM";
        string pass = "PASS";
        string gkey = "?key=XXXXXXXXXXXXXXXXXXXXXXXXXXX";

        string dataFeedUrl = "https://www.google.com/analytics/feeds/data" + gkey;
        string accountFeedUrl = "https://www.googleapis.com/analytics/v2.4/management/accounts" + gkey;

        AnalyticsService service = new AnalyticsService("API Sample");
        service.setUserCredentials(username, pass);

        DataQuery query1 = new DataQuery(dataFeedUrl);


        query1.Ids = "ga:34197921";
        query1.Dimensions = "ga:medium,ga:campaign,ga:date,ga:isMobile,ga:isTablet,ga:searchKeyword,ga:hostname";
        query1.Metrics = "ga:visits,ga:visitors,ga:visitBounceRate,ga:goalStartsAll,ga:goalCompletionsAll,ga:goal1Starts,ga:goal1Completions,ga:goal2Starts,ga:goal2Completions,ga:goal3Starts,ga:goal3Completions,ga:goal4Starts,ga:goal4Completions,ga:adCost,ga:totalValue";
        query1.Sort = "ga:date,ga:hour";
        query1.NumberToRetrieve = 50;


        query1.GAStartDate = new DateTime(2012, 1, 2).ToString("yyyy-MM-dd");
        query1.GAEndDate = DateTime.Now.ToString("yyyy-MM-dd");
        query1.StartIndex = 1;

我的例外:

Google.GData.Client.GDataRequestException:请求执行失败:https://www.google.com/analytics/feeds/data?key=XXXXXXXX&start-index=1&max-results=10000&dimensions=ga:medium,ga:campaign,ga :date,ga:isMobile,ga:isTablet,ga:searchKeyword,ga:hostname&end-date=2013-11-15&ids=ga:34892951&metrics=ga:visits,ga:visitors,ga:visitBounceRate,ga:goalStartsAll,ga:goalCompletionsAll ,ga:goal1Starts,ga:goal1Completions,ga:goal2Starts,ga:goal2Completions,ga:goal3Starts,ga:goal3Completions,ga:goal4Starts,ga:goal4Completions,ga:adCost,ga:totalValue&start-date=2012-01-02 -- -> System.Net.WebException:远程服务器返回错误:(400)错误请求。在 System.Net.HttpWebRequest.GetResponse() 在 Google.GData.Client.GDataRequest.Execute() --- 内部异常堆栈跟踪结束 --- 在 Google.GData.Client.GDataRequest.Execute() 在 Google.GData .Client.GDataGAuthRequest.Execute(Int32 retryCounter) 在 Google.GData.GData.Client.Service.Query(Uri queryUri, DateTime ifModifiedSince,String etag, Int64& contentLength) 在 Google.GData.GData.Client.GDataGAuthRequest.Execute() 在 Google.GData。 Client.Service.Query(Uri queryUri, DateTime ifModifiedSince) 在 Google.GData.Client.Service.Query(FeedQuery feedQuery) 在 Google.GData.Analytics.AnalyticsService.Query(DataQuery feedQuery)

【问题讨论】:

    标签: c# google-analytics google-api http-status-code-400


    【解决方案1】:

    Core Reporting API 没有可用的 POST。但是,这不是问题,您还有其他问题。

    1. 您应该改用Core Reporting API v2.4,因为dataFeedUrl 指向的是较旧的v2.3,无论如何都会重定向并返回v2.4 响应。因此,您不妨将 v2.4 端点用于 dataFeedurl。 https://www.googleapis.com/analytics/v2.4/data
    2. 单个查询最多可以有 7 个维度和 10 个指标。您有超过 10 个指标,因此您将收到 400 Bad Request。应该有伴随 400 的错误消息告诉您问题。您的回复中似乎没有公开这一点,但它可能告诉您的指标太多。
    3. 最后,只是一个建议:移至返回 JSON 并具有一些新功能的 v3(v2.4 不再更新)。并且客户端登录已被弃用,因此您可能应该在某个时候转移到服务帐户 (OAuth 2.0)。

    【讨论】:

    • Pete,我一直在研究如何将上面的代码转换成 google v3 api。我正在努力寻找如何做到这一点。这是我的问题。 1) 我在哪里下载 v3 库。 2) 你知道我在哪里可以找到某人试图实现与我最初通过 v3 发布的类似查询的代码示例。谢谢!
    猜你喜欢
    • 2020-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-08
    • 1970-01-01
    • 2012-08-21
    • 1970-01-01
    • 2011-06-21
    相关资源
    最近更新 更多