【问题标题】:C# - Request Json File with authorization key (cURL example)C# - 使用授权密钥请求 Json 文件(cURL 示例)
【发布时间】:2016-03-17 04:02:26
【问题描述】:

我正在尝试从 C# 应用程序中的 api 对 json 文件执行 HTTP GET 请求。我在获取授权、请求标头和网络响应时遇到问题(.GetResponse 不起作用)。

api 网站上的示例是 curl。

curl -H "Authorization: Bearer ACCESS_TOKEN" https://erikberg.com/nba/boxscore/20120621-oklahoma-city-thunder-at-miami-heat.json

这是我的请求方法,其中还将包括 JSON 反序列化

public static string HttpGet(string URI)
{
    HttpWebRequest req = (HttpWebRequest)WebRequest.Create(URI);
    // Not sure if the credentials input is the correct
    string cred = $"{"Bearer"} {"ACCESS_TOKEN_IS_A_GUID"}";
    req.Headers[HttpRequestHeader.Authorization] = cred;
    req.Method = "GET";

    // GetResponse() is "red", won't work.
    WebResponse response = req.GetResponse();
    using (Stream responseStream = response.GetResponseStream())
    {
        StreamReader reader = new StreamReader(responseStream, Encoding.UTF8);
        return reader.ReadToEnd().Trim();
    }
}

编辑已解决。问题是该请求是针对 GZIP 文件的,并且必须解压缩

 var request = (HttpWebRequest)WebRequest.Create(requestUri);

        request.UserAgent = userAgent;
        request.ContentType = "application/json";
        request.Method = WebRequestMethods.Http.Get;
        request.Headers[HttpRequestHeader.Authorization] = bearer; 
        request.Headers[HttpRequestHeader.AcceptEncoding] = "gzip";

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

        string jsonString;
        using (var decompress = new GZipStream(response.GetResponseStream(), CompressionMode.Decompress))
        {
            using (var sr = new StreamReader(decompress))
                jsonString = sr.ReadToEnd().Trim();
        }
        _Game = JsonConvert.DeserializeObject<Game>(jsonString);

【问题讨论】:

    标签: c# json curl http-headers httprequest


    【解决方案1】:

    你没有得到它,因为你没有访问权限。

    来自 API 站点的 cURL 命令(您在问题中提到)提供以下 JSON

      {
           "error" : {
           "code" : "401",
           "description" : "Invalid access token: ACCESS_TOKEN"
            }
      }
    

    下面的代码也是这样:

            HttpWebRequest req = (HttpWebRequest)WebRequest.Create("URL");
            req.UserAgent = "Bearer";
            WebResponse response = req.GetResponse();
    

    所以您需要的是一个有效的用户名/密码或 userAgent。您可能需要联系该网站。

    【讨论】:

    • 如果这回答了您的问题,请将其标记为答案。
    • 我有一个访问令牌,它是一个 guid。我将尝试使用 req.UserAgent,但我遇到了上下文中不存在的 req.GetResponse() 问题。
    • 你解决了吗?你能正确执行 cURL 命令吗?
    猜你喜欢
    • 2018-05-28
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多