API具有基本身份验证

时间:2017-11-16 10:07:40

标签: c# rest api

我正在尝试基本身份验证使用 WebClient HttpWebRequest 处理其他API,但我似乎经常遇到 403错误,并且不再看到我做错了什么,任何建议都将不胜感激。

可以找到API文档here。为了打破它,这些是用法的要求:

安全 API调用通过带有API密钥的HTTP基本身份验证进行保护。获得API密钥后,将其用作HTTP Basic 用户名 。保留 密码 为空。

输入类型: 您需要指明输入格式,该格式始终为 json

输出格式: 输出格式必须设置为 html

我收到错误:

Web客户端

System.Net.WebException: The remote server returned an error: (403) Forbidden. at System.Net.WebClient.DownloadDataInternal(Uri address, WebRequest& request) at System.Net.WebClient.DownloadString(Uri address) at test.fetchWebClient(Uri apiUrl, String apiKey) in d:\DEVELOPMENTS\websites\highcharts\test.aspx.cs:line 40

WebClient 1

System.Net.WebException: The remote server returned an error: (403) Forbidden. at System.Net.WebClient.DownloadDataInternal(Uri address, WebRequest& request) at System.Net.WebClient.DownloadString(Uri address) at test.fetchWebClient_1(Uri apiUrl, String apiKey) in d:\DEVELOPMENTS\websites\highcharts\test.aspx.cs:line 64

HttpWebRequest的

 System.Net.WebException: The remote server returned an error: (403) Forbidden. at System.Net.HttpWebRequest.GetResponse() at test.fetchHttpWebRequest(Uri apiUrl, String apiKey) in d:\DEVELOPMENTS\websites\highcharts\test.aspx.cs:line 87

ASPX PAGE CODE

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="test.aspx.cs" Inherits="test" %>

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <h1>test API call with basic Authentication</h1>
        <hr />

        <h3>WebClient</h3>
        <div id="resultAPI_WebClient" runat="server" />
        <hr />
        <h3>WebClient 1</h3>
        <div id="resultAPI_WebClient_1" runat="server" />
        <hr />
        <h3>HttpWebRequest</h3>
        <div id="resultAPI_HttpWebRequest" runat="server" />
    </div>
</form>
</body>
</html>

代码提供文件

using System;
using System.IO;
using System.Net;
using System.Text;

public partial class test : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        var apiUrl = new Uri("https://savvy-eu-api.yseop-cloud.com/sandbox/api/v1/describe-chart");
        var apiKey = "XXXXXXXXXXXX";

        // printing the results
        resultAPI_WebClient.InnerHtml = fetchWebClient(apiUrl, apiKey);
        resultAPI_WebClient_1.InnerHtml = fetchWebClient_1(apiUrl, apiKey);
        resultAPI_HttpWebRequest.InnerHtml = fetchHttpWebRequest(apiUrl, apiKey);
    }

    private string fetchWebClient(Uri apiUrl, string apiKey) 
    {
        using (WebClient client = new WebClient())
        {
            try
            {
                string credentials = Convert.ToBase64String(Encoding.ASCII.GetBytes(apiKey + ":" + ""));
                string _UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)";

                client.Proxy = WebRequest.DefaultWebProxy;
                client.UseDefaultCredentials = true;
                client.Headers[HttpRequestHeader.Authorization] = "Basic " + credentials;
                client.Headers[HttpRequestHeader.ContentType] = "application/json;charset=UTF-8";
                client.Headers[HttpRequestHeader.Accept] = "text/html";
                client.Headers[HttpRequestHeader.UserAgent] = _UserAgent;
                var result = client.DownloadString(apiUrl);
                return result;
            }
            catch (Exception ee)
            {
                return ee.ToString();
            }
        }
    }


    private string fetchWebClient_1(Uri apiUrl, string apiKey) 
    {
        using (var client = new WebClient())
        {
            try
            {
                string credentials = Convert.ToBase64String(Encoding.ASCII.GetBytes(apiKey + ":" + ""));
                string _UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)";

                client.UseDefaultCredentials = true;
                client.Headers[HttpRequestHeader.Authorization] = "Basic " + credentials;
                client.Headers[HttpRequestHeader.ContentType] = "application/json;charset=UTF-8";
                client.Headers[HttpRequestHeader.Accept] = "text/html";
                client.Headers[HttpRequestHeader.UserAgent] = _UserAgent;
                var result = client.DownloadString(apiUrl);
                return result;
            }
            catch (Exception ee)
            {
                return ee.ToString();
            }
        }
    }

    private string fetchHttpWebRequest(Uri apiUrl, string apiKey) 
    {
        try
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(apiUrl);
            string authInfo = (apiKey+":"+"");
        authInfo = Convert.ToBase64String(Encoding.Default.GetBytes(authInfo));
            request.Headers.Add("Authorization", "Basic " + authInfo);
            request.Credentials = new NetworkCredential(apiKey, "");
            request.Method = WebRequestMethods.Http.Get;
            request.AllowAutoRedirect = true;
            request.Proxy = null;
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            Stream stream = response.GetResponseStream();
            StreamReader streamreader = new StreamReader(stream);
            string result = streamreader.ReadToEnd();
            return result;
        }
        catch (Exception ee)
        {
            return ee.ToString();
        }
   }
}

0 个答案:

没有答案