Просмотр исходного кода

parse usernames and passwords from urls

Luke Pulverenti 9 лет назад
Родитель
Сommit
6cebecb88c
1 измененных файлов с 29 добавлено и 1 удалено
  1. 29 1
      MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs

+ 29 - 1
MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs

@@ -140,7 +140,17 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager
 
 
         private WebRequest GetRequest(HttpRequestOptions options, string method)
         private WebRequest GetRequest(HttpRequestOptions options, string method)
         {
         {
-            var request = CreateWebRequest(options.Url);
+            var url = options.Url;
+
+            var uriAddress = new Uri(url);
+            var userInfo = uriAddress.UserInfo;
+            if (!string.IsNullOrWhiteSpace(userInfo))
+            {
+                _logger.Info("Found userInfo in url: {0} ... url: {1}", userInfo, url);
+                url = url.Replace(userInfo + "@", string.Empty);
+            }
+
+            var request = CreateWebRequest(url);
             var httpWebRequest = request as HttpWebRequest;
             var httpWebRequest = request as HttpWebRequest;
 
 
             if (httpWebRequest != null)
             if (httpWebRequest != null)
@@ -183,9 +193,27 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager
                 }
                 }
             }
             }
 
 
+            if (!string.IsNullOrWhiteSpace(userInfo))
+            {
+                var parts = userInfo.Split(':');
+                if (parts.Length == 2)
+                {
+                    request.Credentials = GetCredential(url, parts[0], parts[1]);
+                    request.PreAuthenticate = true;
+                }
+            }
+
             return request;
             return request;
         }
         }
 
 
+        private CredentialCache GetCredential(string url, string username, string password)
+        {
+            //ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;
+            CredentialCache credentialCache = new CredentialCache();
+            credentialCache.Add(new Uri(url), "Basic", new NetworkCredential(username, password));
+            return credentialCache;
+        }
+
         private void AddRequestHeaders(HttpWebRequest request, HttpRequestOptions options)
         private void AddRequestHeaders(HttpWebRequest request, HttpRequestOptions options)
         {
         {
             foreach (var header in options.RequestHeaders.ToList())
             foreach (var header in options.RequestHeaders.ToList())