如何通过Google Drive链接仅下载JSON数据而非HTML(VB.NET场景)
解决VB.NET中Google Drive链接下载JSON返回HTML的问题
这个问题我之前碰到过好几次,核心原因是你用的Google Drive共享链接默认是网页预览地址,请求后返回的是带预览界面的HTML,而不是原始的JSON文件。要直接拿到JSON内容,得先把链接转换成Google Drive的直接下载格式,再用VB.NET代码请求。
第一步:转换Google Drive链接格式
先从你的共享链接里提取文件ID:
- 比如你的原始链接是:
https://drive.google.com/file/d/123abcXYZ/view?usp=sharing - 其中
123abcXYZ就是文件ID
把链接改成直接下载格式:
https://drive.google.com/uc?id=你的文件ID&export=download
注意:这个方法只适用于公开共享的文件,如果是私有文件,还需要额外处理OAuth授权(后面会提)。
第二步:VB.NET代码实现
用HttpClient请求修改后的链接,获取JSON字符串后直接反序列化。这里提供两种序列化库的示例(系统自带的System.Text.Json和常用的Newtonsoft.Json):
示例1:使用System.Text.Json
Imports System.Net.Http Imports System.Text.Json ' 先定义你的JSON对应的模型类 Public Class YourJsonModel ' 按你的JSON结构添加属性,比如: Public Property Id As Integer Public Property Name As String ' ...其他属性 End Class Public Async Function FetchAndDeserializeJson() As Task(Of YourJsonModel) Dim fileId As String = "替换成你的文件ID" Dim directDownloadUrl As String = $"https://drive.google.com/uc?id={fileId}&export=download" Using httpClient As New HttpClient() ' 添加User-Agent头,避免Google返回验证页面 httpClient.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36") ' 获取JSON字符串 Dim rawJson As String = Await httpClient.GetStringAsync(directDownloadUrl) ' 反序列化成模型类 Return JsonSerializer.Deserialize(Of YourJsonModel)(rawJson) End Using End Function
示例2:使用Newtonsoft.Json(Newtonsoft.Json需要通过NuGet安装)
Imports System.Net.Http Imports Newtonsoft.Json Public Class YourJsonModel Public Property Id As Integer Public Property Name As String ' ...其他属性 End Class Public Async Function FetchAndDeserializeJson() As Task(Of YourJsonModel) Dim fileId As String = "替换成你的文件ID" Dim directDownloadUrl As String = $"https://drive.google.com/uc?id={fileId}&export=download" Using httpClient As New HttpClient() httpClient.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36") Dim rawJson As String = Await httpClient.GetStringAsync(directDownloadUrl) Return JsonConvert.DeserializeObject(Of YourJsonModel)(rawJson) End Using End Function
可能遇到的额外问题
- 文件非公开共享:如果JSON文件是私有文件,直接用上面的链接会返回权限错误。这时候需要使用Google Drive API,通过OAuth 2.0授权后获取文件内容,需要引入Google的.NET客户端库(Google.Apis.Drive.v3)。
- 大文件返回验证页面:如果文件较大,Google可能会返回一个带"下载"按钮的HTML页面。这时候需要检查返回内容,如果是HTML,提取页面中的真实下载链接,或者通过Cookie绕过验证(这种情况相对少见,添加User-Agent头基本能解决)。
内容的提问来源于stack exchange,提问作者PyDeveloper
相关产品推荐
相关产品推荐

