C# - 使用授权密钥请求Json文件(cURL示例)

时间:2015-12-11 09:33:08

标签: c# json curl http-headers httprequest

我试图从C#应用程序中的api对json文件执行HTTP GET请求。我无法获得授权,请求标头和网络响应(.GetResponse无效)。

api网站上的例子是卷曲。

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

这是我的请求方法,它还包括JSON deseralization

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);

1 个答案:

答案 0 :(得分: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。您可能想要联系该网站。