oAuth uStream API
oAuth uStream API
我正在尝试使用他们的 API 和 oAuth 从 uStream 获取数据。我可以获得授权令牌,并且该令牌在 Rest API 客户端中确实有效,我可以获得数据。但是我无法在我的项目中获取数据...我一直收到 401 unauth..
代码:
protected void Page_Load(object sender, EventArgs e)
{
var client = new RestClient("https://www.ustream.tv/oauth2/token");
var request = new RestRequest(Method.POST);
request.AddHeader("authorization", "Basic xxxxxxxxxxxxxxxxxx");
request.AddHeader("content-type", "application/x-www-form-urlencoded");
request.AddParameter("application/x-www-form-urlencoded", "client_secret=xxxxxxxxxxxxx&client_id=xxxxxxxxxxxx&grant_type=client_credentials&=", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
IRestResponse<TokenObject> response2 = (IRestResponse<TokenObject>)client.Execute<TokenObject>(request);
var tknName = response2.Data.access_token;
GetData(tknName);
}
public void GetData(string token)
{
var client = new RestClient("https://api.ustream.tv/channels/206844441.json");
var request = new RestRequest(Method.GET);
request.AddHeader("authorization", "Bearer" + token);
request.AddHeader("content-type", "application/x-www-form-urlencoded");
IRestResponse jsonResponse = client.Execute(request);
IRestResponse<Channel> json2Response2 = (IRestResponse<Channel>)client.Execute<Channel>(request);
var blah = json2Response2.Content;
}
jsonResponse 返回 401...但我可以在 API 客户端(如 Insomnia)中使用令牌,它会起作用...我可以获得数据。
对我做错了什么有什么想法吗?
谢谢!
假设 token
没有以单个 space 为前缀,那么这一行:
request.AddHeader("authorization", "Bearer" + token);
应该改为(在 Bearer 之后添加一个 space):
request.AddHeader("authorization", "Bearer " + token);
此外,GET
请求数据不需要在请求中添加Content-Type
header;尽管包含不太可能导致错误。
正如 João 提到的,主要问题是字符串 "Bearer" 和令牌本身之间缺少 space 字符。解决此问题后,我很确定它会起作用。
是的,Content-Type 对于 GET 请求来说是多余的,但它不会影响您的请求成功。
此外,您不需要两次提供客户端密码。这足以通过请求 body.
中的授权 header 或 client_secret 属性 来提供它
所以,这足以提供秘密:
request.AddHeader("authorization", "Basic xxxxxxxxxxxxxxxxxx");
Ant 在这种情况下你不应该在请求中再次提供秘密 body,这里是修改后的调用,基于原始代码:
request.AddParameter("application/x-www-form-urlencoded", "client_id=xxxxxxxxxxxx&grant_type=client_credentials&=", ParameterType.RequestBody);
实际上有两件事我错了。 @João Angelo 指出的第一个是字符串之间缺少 space:Bearer & token.
第二个也是最令人沮丧的是授权需要授权...大写 A。现在可以使用...。感谢您的帮助。
我正在尝试使用他们的 API 和 oAuth 从 uStream 获取数据。我可以获得授权令牌,并且该令牌在 Rest API 客户端中确实有效,我可以获得数据。但是我无法在我的项目中获取数据...我一直收到 401 unauth..
代码:
protected void Page_Load(object sender, EventArgs e)
{
var client = new RestClient("https://www.ustream.tv/oauth2/token");
var request = new RestRequest(Method.POST);
request.AddHeader("authorization", "Basic xxxxxxxxxxxxxxxxxx");
request.AddHeader("content-type", "application/x-www-form-urlencoded");
request.AddParameter("application/x-www-form-urlencoded", "client_secret=xxxxxxxxxxxxx&client_id=xxxxxxxxxxxx&grant_type=client_credentials&=", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
IRestResponse<TokenObject> response2 = (IRestResponse<TokenObject>)client.Execute<TokenObject>(request);
var tknName = response2.Data.access_token;
GetData(tknName);
}
public void GetData(string token)
{
var client = new RestClient("https://api.ustream.tv/channels/206844441.json");
var request = new RestRequest(Method.GET);
request.AddHeader("authorization", "Bearer" + token);
request.AddHeader("content-type", "application/x-www-form-urlencoded");
IRestResponse jsonResponse = client.Execute(request);
IRestResponse<Channel> json2Response2 = (IRestResponse<Channel>)client.Execute<Channel>(request);
var blah = json2Response2.Content;
}
jsonResponse 返回 401...但我可以在 API 客户端(如 Insomnia)中使用令牌,它会起作用...我可以获得数据。
对我做错了什么有什么想法吗?
谢谢!
假设 token
没有以单个 space 为前缀,那么这一行:
request.AddHeader("authorization", "Bearer" + token);
应该改为(在 Bearer 之后添加一个 space):
request.AddHeader("authorization", "Bearer " + token);
此外,GET
请求数据不需要在请求中添加Content-Type
header;尽管包含不太可能导致错误。
正如 João 提到的,主要问题是字符串 "Bearer" 和令牌本身之间缺少 space 字符。解决此问题后,我很确定它会起作用。 是的,Content-Type 对于 GET 请求来说是多余的,但它不会影响您的请求成功。
此外,您不需要两次提供客户端密码。这足以通过请求 body.
中的授权 header 或 client_secret 属性 来提供它所以,这足以提供秘密:
request.AddHeader("authorization", "Basic xxxxxxxxxxxxxxxxxx");
Ant 在这种情况下你不应该在请求中再次提供秘密 body,这里是修改后的调用,基于原始代码:
request.AddParameter("application/x-www-form-urlencoded", "client_id=xxxxxxxxxxxx&grant_type=client_credentials&=", ParameterType.RequestBody);
实际上有两件事我错了。 @João Angelo 指出的第一个是字符串之间缺少 space:Bearer & token.
第二个也是最令人沮丧的是授权需要授权...大写 A。现在可以使用...。感谢您的帮助。