使用基本身份验证C#登录网站

本文关键字:登录 网站 身份验证 | 更新日期: 2023-09-27 18:29:50

我正试图编写一个程序,使用基本的身份验证方法访问网站。

网站地址为:http://sv1.apple-media.in/

我用这个代码来阅读网站内容:

String username = "XXXX";
String password = "XXXX";
String url = "http://sv1.apple-media.in/";
WebRequest myReq = WebRequest.Create(url);
CredentialCache mycache = new CredentialCache();
mycache.Add(new Uri(url), "Basic", new NetworkCredential(username, password));
myReq.Credentials = mycache;
myReq.GetResponse();

但我总是遇到这样的错误:

System.Net.WebException was unhandled
   HResult=-2146233079
   Message=The remote server returned an error: (401) Unauthorized.
   Source=System
   StackTrace:
      at System.Net.HttpWebRequest.GetResponse()
      at IDMDownloadListAdderPlugin.Form1.button1_Click(Object sender, EventArgs e) in c:'Users'amir'Documents'Visual Studio 2012'Projects'IDMDownloadListAdderPlugin'IDMDownloadListAdderPlugin'Form1.cs:line 60
      at System.Windows.Forms.Control.OnClick(EventArgs e)
      at System.Windows.Forms.Button.OnClick(EventArgs e)
      at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
      at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
      at System.Windows.Forms.Control.WndProc(Message& m)
      at System.Windows.Forms.ButtonBase.WndProc(Message& m)
      at System.Windows.Forms.Button.WndProc(Message& m)
      at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
      at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
      at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
      at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
      at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
      at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
      at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
      at System.Windows.Forms.Application.Run(Form mainForm)
      at IDMDownloadListAdderPlugin.Program.Main() in c:'Users'amir'Documents'Visual Studio 2012'Projects'IDMDownloadListAdderPlugin'IDMDownloadListAdderPlugin'Program.cs:line 19
      at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
      at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
      at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
      at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
      at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
      at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
      at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
      at System.Threading.ThreadHelper.ThreadStart()
   InnerException:

当我使用chrome浏览器登录网站时,标题是:

Remote Address:31.3.247.107:80
Request URL:http://sv1.apple-media.in/
Request Method:GET
Status Code:200 OK
Request Headersview source
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8,fa;q=0.6
Authorization:Basic something
Cache-Control:max-age=0
Connection:keep-alive
Host:sv1.apple-media.in
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)                 Chrome/38.0.2125.111 Safari/537.36
Response Headersview source
Connection:keep-alive
Content-Encoding:gzip
Content-Type:text/html
Date:Tue, 11 Nov 2014 03:23:28 GMT
Server:nginx
Transfer-Encoding:chunked
Vary:Accept-Encoding

有人能告诉我我做错了什么吗?

谢谢!

使用基本身份验证C#登录网站

您可以自己添加头,而不是使用NetworkCredential。请参阅基本身份验证以了解确切的格式。

// fixed encoding, but taken from http://stackoverflow.com/questions/25852551
string username = "Your username";
string password = "Your password";
// http://stackoverflow.com/questions/7242316/what-encoding-should-i-use-for-http-basic-authentication
var ISO_8859_1 = Encoding.GetEncoding("ISO-8859-1");
var svcCredentials = Convert.ToBase64String(ISO_8859_1.GetBytes(username + ":" + password));
myReq.Headers.Add("Authorization", "Basic " + svcCredentials);