簡體   English   中英

獲取System.Net.WebException:遠程服務器返回錯誤:(403)Forbidden。在Google URL Shortener API Call中

[英]Getting System.Net.WebException: The remote server returned an error: (403) Forbidden. in Google URL Shortener API Call

我使用下面的代碼來縮短長網址

public static string UrlShorten(string url)
{
    string post = "{\"longUrl\": \"" + url + "\"}";
    string shortUrl = url;
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://www.googleapis.com/urlshortener/v1/url?key=" + ReadConfig("GoogleUrlShortnerApiKey"));
    try
    {
        request.ServicePoint.Expect100Continue = false;
        request.Method = "POST";
        request.ContentLength = post.Length;
        request.ContentType = "application/json";
        request.Headers.Add("Cache-Control", "no-cache");

        using (Stream requestStream = request.GetRequestStream())
        {
            byte[] postBuffer = Encoding.ASCII.GetBytes(post);
            requestStream.Write(postBuffer, 0, postBuffer.Length);
        }

        using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
        {
            using (Stream responseStream = response.GetResponseStream())
            {
                using (StreamReader responseReader = new StreamReader(responseStream))
                {
                    string json = responseReader.ReadToEnd();
                    shortUrl = Regex.Match(json, @"""id"": ?""(?<id>.+)""").Groups["id"].Value;
                }
            }
        }
    }
    catch (Exception ex)
    {
        // if Google's URL Shortner is down...
        Utility.LogSave("UrlShorten", "Google's URL Shortner is down", url, ex.ToString());
        //System.Diagnostics.Debug.WriteLine(ex.Message);
        //System.Diagnostics.Debug.WriteLine(ex.StackTrace);
    }
    return shortUrl;
}

我創建了一個調度程序來縮短大量的URL。 並且大部分時間都低於例外

System.Net.WebException:遠程服務器返回錯誤:(403)Forbidden。 在System.Net.HttpWebRequest.GetResponse()

我在想,由於Courtesy Limit我得到了這個例外,所以每用戶限制增加了100,000.0請求/秒/用戶,但我仍然得到相同的例外。

我不明白為什么它發生,即使我一次幾乎沒有2000服務器的請求。

請指教。

看看你的問題,我認為這是一個超出速率限制的錯誤。 如果您修改代碼,則可以檢索錯誤響應:

try
{
  ........
}
catch (WebException exception)
{
   string responseText;

   using(var reader = new StreamReader(exception.Response.GetResponseStream()))
   {
     responseText = reader.ReadToEnd();
   }
}
catch (Exception ex)
{
  ......
}

如果超出速率限制錯誤,您將在responseText找到類似的內容:

{
 "error": {
  "errors": [
   {
    "domain": "usageLimits",
    "reason": "rateLimitExceeded",
    "message": "Rate Limit Exceeded"
   }
  ],
  "code": 403,
  "message": "Rate Limit Exceeded"
 }
}

發生此錯誤是因為您將數據快速發布到webservice,因此谷歌將其檢測為機器人。(如果您經常手動發布數據,則會要求輸入驗證碼)。

所以要解決這個問題,你需要增加每個帖子請求之間的時間間隔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM