安静点DGC 2023-03-06 09:21 采纳率: 77.3%
浏览 53
已结题

微博API https://api.weibo.com/oauth2/access_token 报错

我调用微博api的获取access_token接口报错:
{"error":"invalid_grant","error_code":21325,"request":"/oauth2/access_token","error_uri":"/oauth2/access_token","error_description":"invalid authorization code:7abb88384ea0a118814aadde61bdcccb"}
调用方式是:
https://api.weibo.com/oauth2/access_token?client_id=%E8%87%AA%E5%B7%B1%E7%9A%84appkey&client_secret=%E8%87%AA%E5%B7%B1%E7%9A%84appsecret&grant_type=authorization_code&redirect_uri=%E5%9B%9E%E8%B0%83%E5%9C%B0%E5%9D%80&code=7abb88384ea0a118814aadde61bdcccb

这到底是为什么,是因为code值不能重复使用吗,还是其它原因,我这是在postman上面测试的,用HttpWebRequest结果是一直报400服务器错误,我c#是这样调用的(我看说明是要使用post,但是值是拼在url上的,body可以不传值,我用postman也是post调用,但是值直接拼在url上,没有写在body中,能调但是报上面错):



 public static string HttpPost(string Url, string postDataStr)
        { 
                int I = 0; 
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
                CookieContainer cookieCon = new CookieContainer(); 
                request.Method = "POST";
                request.Timeout = 50000;  
                request.CookieContainer = cookieCon;
                request.KeepAlive = true;
                request.ProtocolVersion = HttpVersion.Version10; 
                request.ServicePoint.Expect100Continue = false; 
                Stream myRequestStream = request.GetRequestStream();
                StreamWriter myStreamWriter = new StreamWriter(myRequestStream);
                myStreamWriter.Write(postDataStr);
                myStreamWriter.Close();
                string retString = null; 
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                if (response != null)
                {
                    response.Cookies = cookieCon.GetCookies(response.ResponseUri);
                    Stream myResponseStream = response.GetResponseStream();
                    StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
                    retString = myStreamReader.ReadToEnd();
                    myStreamReader.Close();
                    myResponseStream.Close();
                    myResponseStream.Dispose(); 
                    myRequestStream.Close();
                    myRequestStream.Dispose();
                }

                return retString; 

        }

postDataStr值我照样也传了值

  • 写回答

3条回答 默认 最新

  • CodeBytes 2023-03-06 09:33
    关注

    该回答引用ChatGPT

    1、 提供的信息,你调用微博API获取access_token时返回了错误信息"invalid_grant",错误代码为21325,错误描述为"invalid authorization code:7abb88384ea0a118814aadde61bdcccb"。这个错误通常是由于授权码(authorization code)已过期或无效导致的。

    2、 授权码是一种临时凭证,用于在授权码模式下交换访问令牌。授权码通常只能使用一次,过期时间也很短,因此需要在获取授权码后尽快使用。如果授权码已过期或无效,再次使用它进行访问令牌的获取时就会报错"invalid_grant"。

    3、 建议你检查一下你的授权码是否过期或者是否已经被使用过。如果是这个问题,需要重新获取授权码并使用新的授权码进行访问令牌的获取。

    4、另外,关于你使用的C#代码,根据你提供的信息,似乎没有把授权码作为参数传递给接口。在获取授权码后,你需要把授权码作为参数加入到请求的URL中。具体来说,在你的URL中加入参数"code=你的授权码",例如:

    https://api.weibo.com/oauth2/access_token?client_id=你的appkey&client_secret=你的appsecret&grant_type=authorization_code&redirect_uri=回调地址&code=你的授权码
    
    

    5、 另外,建议你尝试使用POST方式发送请求,因为POST方式更加安全,也更容易传递授权码等敏感信息。如果还有问题,可以提供更多的信息和代码,以便更好地帮助你解决问题。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月14日
  • 已采纳回答 3月6日
  • 创建了问题 3月6日

悬赏问题

  • ¥15 三菱变频器模块怎么检测触发
  • ¥15 在C#方法中使用了.Refresh();刷新了控件,但是不是最新值
  • ¥30 求一下解题思路,完全不懂。
  • ¥30 关于#硬件工程#的问题:求一下解题思路
  • ¥15 运筹学对偶单纯行法构造扩充问题
  • ¥20 XP系统的老电脑一开机就提示找不到rundll.exe,付费求解
  • ¥15 milvus查询出来的score怎么转换成0-1之间的相似性
  • ¥15 lvgl V9移植到linux开发板
  • ¥15 VB.net中在窗体中创建一个button控件来关闭窗体,但是提示错误,我该怎么办
  • ¥15 网上下载好的程序但是arduinoIDE编程报错,运行不了,哪里出错了,能具体给改一下吗