【问题标题】:Pingdom restful API C#Pingdom 宁静 API C#
【发布时间】:2014-02-24 07:26:45
【问题描述】:

我在使用 Pingdoms API 时遇到问题

我为我的应用程序生成了一个密钥并将其添加到我的请求的标题中。但我不断收到 401 错误代码 :(

NetworkCredential nc = new NetworkCredential("my_email", "my_password", "httpS://api.pingdom.com/2.0/checks");
CredentialCache cc = new CredentialCache();
cc.Add("httpS://api.pingdom.com/2.0/checks", 443, "Basic", nc);

HttpWebRequest request = HttpWebRequest)WebRequest.Create("httpS://api.pingdom.com/2.0/checks");
request.Proxy = new WebProxy("my_proxy",true); //I'm behind a strict firewall...
request.Headers.Add("App-Key", "my_appKey");
request.ContentLength = 0;
request.Credentials = cc;
request.PreAuthenticate = true;
request.Method = "POST";

HttpWebResponse response = (HttpWebResponse)request.GetResponse();

我很迷茫:(

无论我得到什么:

An unhandled exception of type 'System.Net.WebException' occurred in System.dll
Additional information: The remote server returned an error: (401) Unauthorized.

工作代码 感谢@Guy,我让它工作了!这是我为遇到同样问题的人提供的工作代码

public class PingdomChecks
{
    public List<PingdomCheck> Checks { get; set; }
}

public class PingdomCheck
{
    public string ID { get; set; }
    public int Created { get; set; }
    public string Name { get; set; }
    public string Hostname { get; set; }
    public string Resolution { get; set; }
    public int LastErrorTime { get; set; }
    public int LastTestTime { get; set; }
    public int LastResponseTime { get; set; }
    public string Status { get; set; }
    public string[] Tags { get; set; }
}

public class Tools
{

    public static void SetBasicAuthHeader(WebRequest request, String userName, String userPassword)
    {
        string authInfo = userName + ":" + userPassword;
        authInfo = Convert.ToBase64String(Encoding.Default.GetBytes(authInfo));
        request.Headers["Authorization"] = "Basic " + authInfo;
    }

    public static void Pingdom()
    {
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://api.pingdom.com/api/2.0/checks");
        request.Headers.Add("App-Key", "YOUR_APP_KEY");
        request.ContentLength = 0;
        request.PreAuthenticate = true;
        request.Method = "GET";
        SetBasicAuthHeader(request, "YOUR_EMAIL", "YOUR_PASSWORD");

        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        var stream = response.GetResponseStream(); 
        var reader = new StreamReader(stream);
        var html = reader.ReadToEnd();

        PingdomCheck Checks = JsonConvert.DeserializeObject<PingdomCheck>(html);
    }

}

【问题讨论】:

    标签: c# api rest pingdom


    【解决方案1】:

    一些服务器希望在不要求的情况下获得身份验证。如果您只使用 request.Credentials = cc; 并且 C# 不会发送它 如果您使用wireshark并查看它发送到服务器的内容,您会看到您缺少标题。 解决这个问题的方法是强制使用身份验证标头。

    //so instead of using:
    //request.Credentials = cc;
    //request.PreAuthenticate = true;
    //you should call:
    
        SetBasicAuthHeader(request,  "my_email", "my_password")
        }
    
        public void SetBasicAuthHeader(WebRequest request, String userName, String userPassword)
        {
            string authInfo = userName + ":" + userPassword;
            authInfo = Convert.ToBase64String(Encoding.Default.GetBytes(authInfo));
            request.Headers["Authorization"] = "Basic " + authInfo;
        }
    

    【讨论】:

      猜你喜欢
      • 2011-07-21
      • 1970-01-01
      • 2012-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-06
      • 2010-09-22
      • 1970-01-01
      相关资源
      最近更新 更多