首页 > 解决方案 > 1fichier.com 的 HTTP 基本身份验证

问题描述

我正在尝试使用 1fichier.com 的基本身份验证直接下载一些文件,这在浏览器“https://email:password@1fichier.com/?file_ID&auth=1”中完美运行,但我正在尝试做同样的事情我的应用程序没有任何工作...我尝试使用纯电子邮件和密码的请求标头,我尝试使用 base64 编码的电子邮件和密码的标头,我尝试使用我的凭据发送 Post 请求,但我总是收到 401 错误:未经授权。有人知道如何将我的 http 请求中的身份验证发送到 1fichier 服务器吗?

这是他们在帮助页面中提供的内容:

登录后,高级会员可以下载无限数量的文件,没有限制。!!!您必须登录才能被识别为高级版!!!

您也可以使用“基本身份验证”直接下载:https://email:password@1fichier.com/?file_ID 提示:将 &auth=1 添加到 URL。服务器将要求进行身份验证。电子邮件地址的“@”在此协议下无效,您必须改用“%”。

wget 示例: wget '下载链接' --no-check-certificate --http-user='email' --http-password='password' --auth-no-challenge --content-disposition

     using UnityEngine.Networking;

     string user = "my email";
     string password = "my password";
     string combined = user + ":" + password;
     
     UnityWebRequest request = UnityWebRequest.Get("https://1fichier.com/?cs6czd22c8odod74dal2&auth=1");
     request.SetRequestHeader("Authorization","Basic " + combined);
     yield return request.SendWebRequest();
     if(request.isHttpError)
     {
       Debug.Log(request.error);
     }
      else
     {
         if (request.isDone)
         {
             Debug.Log("Done");
         }
     }

base64编码:

     using UnityEngine.Networking;

     string user = "my email";
     string password = "my password";
     string base64User = System.Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(user));
     string base64pass = System.Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(password));
     string combined = base64User + ":" + base64pass;
     UnityWebRequest request = UnityWebRequest.Get("https://1fichier.com/?cs6czd22c8odod74dal2&auth=1");
     request.SetRequestHeader("Authorization","Basic " + combined);
     yield return request.SendWebRequest();
     if(request.isHttpError)
     {
         Debug.Log(request.error);
     }
     else
     {
         if (request.isDone)
         {
             Debug.Log("Done");
         }
     }

标签: c#unity3dauthenticationhttprequestbasic-authentication

解决方案


我找到了我要找的东西,它与请求标头没有任何关系;

我在浏览器中粘贴的原始网址是这样的:“https://myemail@gmail.com:mypassword@1fichier.com/?File_ID&auth=1”;

所以我记录了浏览器的网络请求,并且 url 如下所示:“https://myemail%40gmail.com:mypassword@1fichier.com/?File_ID&auth=1”;

我将它作为 url 粘贴到我的应用程序中的 get 请求中,它运行良好。

using UnityEngine.Networking;
UnityWebRequest request = UnityWebRequest.Get("https://myemail%40gmail.com:mypassword@1fichier.com/?File_ID&auth=1");

推荐阅读