使用RestSharp调用Twitter API v2遇401认证失败问题求助
问题根源分析
你的代码存在两个核心问题,导致认证失败:
- 参数名错误:Twitter API v2 发送推文的字段是
text,而非v1.1版本的status。 - 请求体格式不匹配:你设置了
Content-Type: application/json,但用AddParameter(..., ParameterType.GetOrPost)会将参数以表单/URL参数形式发送,而非JSON格式,这会导致签名验证失败,同时API无法识别请求内容。
另外你的代码是C#语法,下面提供修正后的C#代码,并转成VB.NET版本。
修正后的C#代码
var authenticator = OAuth1Authenticator.ForAccessToken( CONSUMER_KEY, CONSUMER_SECRET, // 注意:此处应为CONSUMER_SECRET,而非原代码的CONSUMER_TOKEN ACCESS_TOKEN, ACCESS_TOKEN_SECRET, AuthSignatureMethod.HmacSha1 ); var options = new RestClientOptions("https://api.twitter.com/2") { Authenticator = authenticator }; var client = new RestClient(options); var request = new RestRequest("/tweets", Method.Post); // 设置正确的Content-Type request.AddHeader("Content-Type", "application/json"); // 用AddJsonBody发送JSON格式请求体 request.AddJsonBody(new { text = "test" }); var response = client.Execute(request); var json_response = response.Content; Console.WriteLine(json_response);
对应的VB.NET代码
Dim authenticator = OAuth1Authenticator.ForAccessToken( CONSUMER_KEY, CONSUMER_SECRET, ' 注意:此处应为CONSUMER_SECRET,而非原代码的CONSUMER_TOKEN ACCESS_TOKEN, ACCESS_TOKEN_SECRET, AuthSignatureMethod.HmacSha1 ) Dim options = New RestClientOptions("https://api.twitter.com/2") With { .Authenticator = authenticator } Dim client = New RestClient(options) Dim request = New RestRequest("/tweets", Method.Post) ' 设置正确的Content-Type request.AddHeader("Content-Type", "application/json") ' 发送JSON格式请求体 request.AddJsonBody(New With {.text = "test"}) Dim response = client.Execute(request) Dim json_response = response.Content Console.WriteLine(json_response)
关键修改说明
- 修正OAuth参数:原代码第二个参数写的
CONSUMER_TOKEN是错误的,OAuth1签名需要的是CONSUMER_SECRET,这很可能是认证失败的核心原因。 - 适配API v2字段:将
status改为text,符合Twitter API v2的请求规范。 - 匹配请求格式:用
AddJsonBody替代AddParameter,确保请求体为JSON格式,与设置的Content-Type一致,保证签名验证通过。
额外验证点
- 确认所有密钥、令牌无拼写错误或多余空格。
- 检查Twitter开发者后台,确保该应用已开启
Read and write权限,API v2需要明确配置权限才能发送推文。
内容的提问来源于stack exchange,提问作者Lewnox
相关产品推荐
相关产品推荐

