C# 如何使用 HttpWebRequest 获取 JSON 字符串
C# how to get the JSON string by using HttpWebRequest
任何人都可以帮助我从 gitlab 站点获取 JSON。我已经编写了代码,但是当我编译代码时,我在控制台应用程序 (C#) 中收到异常 The remote server returned an error: (401) Unauthorized.
。
在我的浏览器中,我 运行 同样 URL 当我在浏览器中登录时,我可以获得 JSON 字符串。如果我从浏览器注销后 运行 相同 URL,我会在浏览器中收到 {"message":"401 Unauthorized"}
消息。
由于同样的异常,我认为我没有将用户名和凭据传递到我的 HttpWebRequest
。
我在行 HttpWebResponse response = request.GetResponse() as HttpWebResponse;
中遇到异常
我的代码:
string URL = "http://gitlab.company.com/api/v3/users?per_page=100&page=1";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);
request.ContentType = "application/json; charset=utf-8";
request.Headers["Authorization"] = "Basic " + Convert.ToBase64String(Encoding.Default.GetBytes("userName:passWord"));
request.PreAuthenticate = true;
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
using (Stream responseStream = response.GetResponseStream())
{
StreamReader reader = new StreamReader(responseStream, Encoding.UTF8);
Console.WriteLine(reader.ReadToEnd());
}
我的问题:
- 我哪里错了什么?
- 我知道我必须使用 GET 动词来获取 API 中的数据,但我不知道我必须在哪里使用 GET 动词?
提前致谢。
在您的请求中使用编码,凭据需要在 ISO-8859-1 中编码
string URL = "http://gitlab.company.com/api/v3/users?per_page=100&page=1";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);
request.ContentType = "application/json; charset=utf-8";
request.Headers["Authorization"] = "Basic " + Convert.ToBase64String(Encoding.GetEncoding("ISO-8859-1").GetBytes("username:password"));
request.PreAuthenticate = true;
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
using (Stream responseStream = response.GetResponseStream())
{
StreamReader reader = new StreamReader(responseStream, Encoding.UTF8);
Console.WriteLine(reader.ReadToEnd());
}
如果这不起作用,请删除 Headers 行并将其替换为以下内容:
request.Credentials = new NetworkCredential("username", "password");
任何人都可以帮助我从 gitlab 站点获取 JSON。我已经编写了代码,但是当我编译代码时,我在控制台应用程序 (C#) 中收到异常 The remote server returned an error: (401) Unauthorized.
。
在我的浏览器中,我 运行 同样 URL 当我在浏览器中登录时,我可以获得 JSON 字符串。如果我从浏览器注销后 运行 相同 URL,我会在浏览器中收到 {"message":"401 Unauthorized"}
消息。
由于同样的异常,我认为我没有将用户名和凭据传递到我的 HttpWebRequest
。
我在行 HttpWebResponse response = request.GetResponse() as HttpWebResponse;
我的代码:
string URL = "http://gitlab.company.com/api/v3/users?per_page=100&page=1";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);
request.ContentType = "application/json; charset=utf-8";
request.Headers["Authorization"] = "Basic " + Convert.ToBase64String(Encoding.Default.GetBytes("userName:passWord"));
request.PreAuthenticate = true;
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
using (Stream responseStream = response.GetResponseStream())
{
StreamReader reader = new StreamReader(responseStream, Encoding.UTF8);
Console.WriteLine(reader.ReadToEnd());
}
我的问题:
- 我哪里错了什么?
- 我知道我必须使用 GET 动词来获取 API 中的数据,但我不知道我必须在哪里使用 GET 动词?
提前致谢。
在您的请求中使用编码,凭据需要在 ISO-8859-1 中编码
string URL = "http://gitlab.company.com/api/v3/users?per_page=100&page=1";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);
request.ContentType = "application/json; charset=utf-8";
request.Headers["Authorization"] = "Basic " + Convert.ToBase64String(Encoding.GetEncoding("ISO-8859-1").GetBytes("username:password"));
request.PreAuthenticate = true;
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
using (Stream responseStream = response.GetResponseStream())
{
StreamReader reader = new StreamReader(responseStream, Encoding.UTF8);
Console.WriteLine(reader.ReadToEnd());
}
如果这不起作用,请删除 Headers 行并将其替换为以下内容:
request.Credentials = new NetworkCredential("username", "password");