Foxtable(狐表)用户栏目专家坐堂 → [求助]使用百度网盘开放平台如何转换成狐表语言获取 Access_Taken?


  共有5688人关注过本帖树形打印复制链接

主题:[求助]使用百度网盘开放平台如何转换成狐表语言获取 Access_Taken?

帅哥哟,离线,有人找我吗?
新福星
  1楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1964 积分:15604 威望:0 精华:0 注册:2011/7/16 20:59:00
[求助]使用百度网盘开放平台如何转换成狐表语言获取 Access_Taken?  发帖心情 Post By:2022/12/27 19:27:00 [只看该作者]

使用百度网盘开放平台,简化模式接入方式获取接入授权。如何转换成狐表语言?
如下图。通过Dim urlstr As String = CExp(url, client_id, display)语句拼接出URLStr,然后将该字串人工拷贝加入到浏览器的地址中。回车后会新生返回一个地址,在这个返回的地址中包含了Access_Taken.
见下图。

现在希望把上述人工操作的过程,转换成狐表语言,如何获取这个返回的Aceess_Taken?


图片点击可在新窗口打开查看此主题相关图片如下:qq图片20221227191646.png
图片点击可在新窗口打开查看

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110773 积分:563797 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/12/27 20:16:00 [只看该作者]

没有办法直接获取的,这种需要有一个web服务做回调,然后在回调里接收数据。用法和微信的授权页面一样:http://www.foxtable.com/mobilehelp/topics/0235.htm

 回到顶部
帅哥哟,离线,有人找我吗?
qqzwc
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:162 积分:1145 威望:0 精华:0 注册:2020/2/11 11:42:00
  发帖心情 Post By:2022/12/28 13:21:00 [只看该作者]

你没有说明,其实手工打开那个网址之后,需要先输入用户名和密码登录百度账号(已登录情况下直接点授权),才能获取到accesstoken
其实你点的这一下授权按钮,需要好多步代码操作才能完成

你主要解决的问题是如何使用api方式登录百度,并获取登录成功后的cookie和bdstoken

github上搜一下:https://passport.baidu.com/v2/api/?login
获得的代码都是如何登录百度的,比如
https://github.com/rx-ted/Python/blob/main/爬取/baidu/baidu.py

需要有一定的编程知识和网络爬虫知识
(1.访问一个百度产品的网址,获取临时cookie 2.获取百度登录token和rsa公钥 3.使用rsa公钥对百度密码进行加密 4.使用token,百度账号,加密后的百度密码完成登录 5.使用登录成功后的cookie和bdstoken完成百度OAuth授权)

另外,其实你可以转换一下思路,换成设备码授权模式,代码写起来更简单https://pan.baidu.com/union/doc/fl1x114ti
1.先访问https://openapi.baidu.com/oauth/2.0/device/code?response_type=device_code&client_id=您应用的AppKey&scope=basic,netdisk
2.JSON解析qrcode_url字段,展示二维码图片,用户通过手机等智能终端扫描二维码
3.通过 Device Code 轮询换取 Access Token,若超时后退出程序
[此贴子已经被作者于2022/12/28 16:30:20编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
新福星
  4楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1964 积分:15604 威望:0 精华:0 注册:2011/7/16 20:59:00
  发帖心情 Post By:2022/12/29 7:32:00 [只看该作者]

@qqzwc
设备码授权模式也进行了测试,还是无法达到我的要求。和百度网盘技术沟通,他们目前没有将用户名密码代入参数,直接返回Access_Token的方式。
我是想用狐表做一个数据定时自动备份程序。长期在服务器上运行自动备份。现在是每次启用都要人工登陆一次或者录入一次信息,有人工介入那就直接备份了,还要程序做什?所以因为每次必须人工介入我的想法目前无法实现!

图片点击可在新窗口打开查看此主题相关图片如下:qq图片20221229072400.png
图片点击可在新窗口打开查看


 回到顶部
帅哥哟,离线,有人找我吗?
qqzwc
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:162 积分:1145 威望:0 精华:0 注册:2020/2/11 11:42:00
  发帖心情 Post By:2022/12/29 13:11:00 [只看该作者]

百度官方的确没有给出直接使用用户名和密码进行登录的api,但这倒不是无解,就是稍微有点繁琐,上面回复你了:
github上搜一下:https://passport.baidu.com/v2/api/?login
参照代码思路搬运一下。

再比如搜索baidu oauth passport.baidu.com也行
得到的这个,基本就是完整代码了:https://github.com/qhgz2013/BaiduCloudSync/blob/master/BaiduCloudSync/api/baidu-oauth.cs

不想写这些代码的话,可以跳过百度网盘,使用其他方式备份(FTP或者WebDav),有点答非所问了,上面百度的懒得写到foxtable主要是因为百度登录不开放,一是登录地址和登录方法估计会时不时变化,二是会可能出现要输入验证码的情况,懒得搞了

这是我写的Foxtable示例代码,上传文件到坚果云。免费版每月1GB的上传流量。这个云盘挺不错的,还有增量备份和文件历史记录快照的功能。
国内网盘只有坚果云和诚通网盘支持WebDav,诚通的禁止通过WebDav下载,免费用户网页下载限速,但优点是容量有500GB。
不喜欢可以用国外的网盘,或者自己搭建网盘,比如群辉再开启WebDav Server就行了

'参考来源:https://github.com/ZZRRegion/JianGuoYunWebDav/blob/master/JianGuoYunWebDav/HttpWebDav.cs
'!!!注意需要添加.Net原生的System.Net.Http.dll外部引用!!!
'坚果云开启WebDav方法:https://help.jianguoyun.com/?p=2064

'配置坚果云的账号、密码、webdav地址、要上传的文件
Dim UserName As String = "xxx@xxx.com"
Dim Password As String = "xxx"

'必须上传到我的坚果云文件夹下,否则会提示404。
Dim BaseUrl As String = "https://dav.jianguoyun.com/dav/我的坚果云/"
Dim file As String = "D:\已检验未入库.xls"

'初始化Http客户端
Dim httpClientHandler As New System.Net.Http.HttpClientHandler()
httpClientHandler.UseProxy = True
httpClientHandler.Proxy = New System.Net.WebProxy()
httpClientHandler.Credentials = New System.Net.NetworkCredential(UserName, Password)
httpClientHandler.PreAuthenticate = True
Dim httpClient As New System.Net.Http.HttpClient(httpClientHandler)

'读取文件并上传
Dim finfo As New System.IO.FileInfo(file)

'如果已存在同名文件且内容有变化,将会被覆盖并自动保留历史版本。
Dim url As String = BaseUrl + finfo.Name
Dim byteArrayContent As New System.Net.Http.ByteArrayContent(System.IO.File.ReadAllBytes(file))

'发送http请求
Dim clientTask = httpClient.PutAsync(url, byteArrayContent)

'等待请求结果
clientTask.Wait()
Dim rep As System.Net.Http.HttpResponseMessage = clientTask.Result

If rep.IsSuccessStatusCode Then
    Output.Show("文件上传成功!")
Else
    Output.Show("文件上传失败:" & rep.StatusCode)
End If 

''创建文件夹
' Dim fdname As String = "测试文件夹"
' Dim httpRequestMessage As New System.Net.Http.HttpRequestMessage()
' httpRequestMessage.Method = New System.Net.Http.HttpMethod("MKCOL")
' httpRequestMessage.RequestUri = New Uri(BaseUrl + fdname)
' clientTask = httpClient.SendAsync(httpRequestMessage)
' clientTask.Wait()
' If clientTask.Result.IsSuccessStatusCode Then
    ' Output.Show("文件夹创建成功!")
' Else
    ' Output.Show("文件夹创建失败:" & clientTask.Result.StatusCode)
' End If 

' '删除文件
' Dim deleteFile As String = "测试删除文件.btw"
' httpRequestMessage = New System.Net.Http.HttpRequestMessage()
' httpRequestMessage.Method = System.Net.Http.HttpMethod.Delete
' httpRequestMessage.RequestUri = New Uri(BaseUrl + deleteFile)
' clientTask = httpClient.SendAsync(httpRequestMessage)
' clientTask.Wait()
' If clientTask.Result.IsSuccessStatusCode Then
    ' Output.Show("文件删除成功!")
' Else
    ' Output.Show("文件删除失败:" & clientTask.Result.StatusCode)
' End If

' '下载文件
' Dim downFile As String = "【01】坚果云快速向导.pdf"
' Dim downPath As String = "D:\"
' url = BaseUrl + downFile
' Dim task = httpClient.GetByteArrayAsync(url)
' task.Wait()
' If task.IsCompleted Then
    ' System.IO.File.WriteAllBytes(downPath + downFile, task.Result)
    ' Output.Show("文件下载成功!")
' else
    ' Output.Show("文件下载失败!")
' End If 
[此贴子已经被作者于2022/12/31 13:42:59编辑过]

 回到顶部