You need to enable JavaScript to run this app. 1fichier.com HTTP Basic Auth直连下载401未授权问题实现方案
优惠活动
大模型
产品
解决方案
定价
更多

1fichier.com HTTP Basic Auth直连下载401未授权问题实现方案

1fichier Basic Authentication直连下载401问题解决

已验证的踩坑点

  • 第一份手动设置请求头的代码完全不符合HTTP Basic Auth格式要求:直接将明文的账号:密码字符串拼在Basic标识后,没有对拼接后的内容做Base64编码,服务器解析凭证时直接判定格式非法。
  • 第二份分段编码的代码偏离了RFC 7617定义的Basic Auth标准流程:对账号、密码分别单独做Base64编码后再用冒号拼接,实际发送的凭证内容是Base64(账号):Base64(密码),而非服务器要求的Base64(账号:密码),解码后得到的字符串完全和真实凭证不匹配。
  • 遗漏了1fichier的专属适配规则:Basic Auth场景下作为账号的邮箱字符串,必须将原本的@符号替换为%,否则服务器识别的账号和实际注册账号不一致。
  • 没有适配服务器的认证触发逻辑:URL后必须追加&auth=1参数,服务器才会主动校验请求携带的认证信息,否则会返回无登录态的免费下载页面而非认证后的直连流。

正确实现逻辑

完全对齐官方wget示例的参数规则,按标准流程构造请求:

  1. 预处理账号:将邮箱中的@替换为%
  2. 按规范构造凭证:将预处理后的账号、密码用冒号拼接为完整字符串,统一用UTF-8转字节流后做Base64编码
  3. 构造请求URL:在原文件直链后追加&auth=1参数
  4. 设置请求头:携带格式为Basic <Base64编码后的完整凭证>的Authorization字段
  5. 适配证书校验:跳过客户端证书校验逻辑,和wget的--no-check-certificate效果对齐

可直接运行的Unity实现参考:

using UnityEngine.Networking;
using System.Text;
using System;

// 自定义证书处理器,跳过证书校验
public class SkipCertificateCheckHandler : CertificateHandler
{
    protected override bool ValidateCertificate(byte[] certificateData) => true;
}

// 协程内发起下载请求的逻辑
IEnumerator Start1fichierDownload()
{
    // 邮箱中的@替换为%,符合1fichier认证规则
    string user = "myemail%domain.com";
    string password = "your_login_password";
    
    // 按标准构造Base64凭证
    string rawCredential = $"{user}:{password}";
    string base64Auth = Convert.ToBase64String(Encoding.UTF8.GetBytes(rawCredential));
    
    // 带auth=1参数的目标下载链接
    string targetUrl = "https://1fichier.com/?cs6czd22c8odod74dal2&auth=1";
    
    UnityWebRequest request = UnityWebRequest.Get(targetUrl);
    request.SetRequestHeader("Authorization", $"Basic {base64Auth}");
    request.certificateHandler = new SkipCertificateCheckHandler();
    
    yield return request.SendWebRequest();
    
    if (request.result is UnityWebRequest.Result.ConnectionError or UnityWebRequest.Result.ProtocolError)
    {
        Debug.Log($"请求失败:{request.error}");
        yield break;
    }
    Debug.Log("认证通过,开始接收下载数据流");
}

注意事项

  • 不需要等到服务器返回401认证挑战头再携带凭证,带&auth=1参数的请求第一次发出时就会触发全量校验,直接在初始请求中携带正确凭证即可(对应wget的--auth-no-challenge参数效果)
  • 不要在URL中直接拼接email:password@格式的凭证信息,UnityWebRequest会对URL中的特殊字符做自动转义,反而会导致凭证识别错误,统一放在Authorization请求头中传递更稳定

内容的提问来源于stack exchange,提问作者CS_Studios

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.23 11:15:01