以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]使用百度网盘开放平台如何转换成狐表语言获取 Access_Taken?  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=184740)

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

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


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

--  作者:有点蓝
--  发布时间:2022/12/27 20:16:00
--  
没有办法直接获取的,这种需要有一个web服务做回调,然后在回调里接收数据。用法和微信的授权页面一样:http://www.foxtable.com/mobilehelp/topics/0235.htm
--  作者:qqzwc
--  发布时间: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编辑过]

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

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


--  作者:qqzwc
--  发布时间: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编辑过]