如何在 C# 中使用给定的 API 密钥获取 http 内容?

问题描述 投票:0回答:1

http://ssw.com/profile/?apikey = skdwkdkfkkdj

我尝试过使用

public async Task<string> GetFromUriAsync(string requestUri, string token)
    {
        var client = new HttpClient();

        client.BaseAddress = new Uri(BaseUri);

        client.DefaultRequestHeaders.Authorization =
            new AuthenticationHeaderValue("apikey", "=" + token);
        HttpResponseMessage response = await client.GetAsync(requestUri);
        response.EnsureSuccessStatusCode();
        string responseBody = await response.Content.ReadAsStringAsync();

        return responseBody;
    }

然后返回null

我错过了什么还是完全错了?

c# rest dotnet-httpclient
1个回答
1
投票

您尝试在 HTTP 请求的标头信息中传递 API 密钥。您需要做的只是传递整个 URL,无需任何其他标头信息。

IE:使用“http://ssw.com/profile?apikey=abcdef”作为 requestUri 并将令牌发送为 null。另外,删除 client.DefaultRequestHeaders.Authorization 属性的设置。授权是一个用户/通行证系统,而不是基于令牌的系统。

要对此进行测试,请下载 Fiddler 4 (https://www.telerik.com/download/fiddler)。安装 fiddler 后,在“Composer”选项卡上,您可以通过将 URL 直接放入 URL 框中并单击“执行”来测试所需的不同查询。然后,您将能够使用检查员查看答复并找出您需要从那里开始的方向。

以下是我用于 HTTP GET 和 POST 操作的类:

    public static string HTTPGET(string url)
    {
        try
        {
            HttpWebRequest request = (HttpWebRequest) WebRequest.Create(url);
            request.Timeout = 100000;
            HttpWebResponse response = (HttpWebResponse) request.GetResponse();
            Stream responseStream = response.GetResponseStream();

            if (responseStream != null)
                using (StreamReader resStream = new StreamReader(responseStream))
                    return resStream.ReadToEnd();
            return null;
        }
        catch (Exception e)
        {
            Console.WriteLine(url);
            Console.WriteLine(e);
            return null;
        }
    }

    public static string HTTPPOST(string url, string postData)
    {
        try
        {
            HttpWebRequest webRequest = (HttpWebRequest) WebRequest.Create(url);
            webRequest.Method = "POST";
            webRequest.ContentType = "x-www-form-urlencoded";

            byte[] byteArray = Encoding.UTF8.GetBytes(postData);
            using (Stream requestStream = webRequest.GetRequestStream())
                requestStream.Write(byteArray, 0, byteArray.Length);
            using (Stream responseStream = webRequest.GetResponse().GetResponseStream())
                if (responseStream != null)
                    using (StreamReader responseReader = new StreamReader(responseStream))
                        return responseReader.ReadToEnd();
            return null;
        }
        catch (Exception e)
        {
            Console.WriteLine(url);
            Console.WriteLine(postData);
            Console.WriteLine(e);
            return null;
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.