Меню

Удаленный сервер возвратил ошибку 401 несанкционированный e publish

I am extracting gmail contacts using opencontactsnet. I get The remote server returned an error: (401) Unauthorized. when executing this line

HttpWebResponse exportResponse = ( HttpWebResponse ) contactsRequest.GetResponse();

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Net;
using System.Web.UI;
using System.Web.UI.WebControls;
using OpenContactsNet;

public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {
        GmailExtract gm = new GmailExtract();
        NetworkCredential nw = new NetworkCredential("chendur.pandiya","**");
        MailContactList mc;
        if (gm.Extract(nw, out mc))
        {

        }
        else
        {

        }
     }
}

Here is the complete GmailExtract class,

using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Text;
using Utilities.Web;

namespace OpenContactsNet
{
    public class GmailExtract : IMailContactExtract
    {
        private const string ContinueUrl = "http://mail.google.com/mail?ui=html&zy=l";
        private const string ExportUrl = "https://mail.google.com/mail/contacts/data/export?exportType=ALL&groupToExport=&out=GMAIL_CSV";
        private const string LoginRefererUrl = "https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3Fui%3Dhtml%26zy%3Dl&ltmpl=default&ltmplcache=2";
        private const string LoginUrl = "https://www.google.com/accounts/ServiceLoginAuth?service=mail";
        private const string UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; EmbeddedWB 14.52 from: http://www.bsalsa.com/ EmbeddedWB 14.52; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.1; .NET CLR 1.0.3705; .NET CLR 3.0.04506.30)";

        #region IMailContactExtract Members

        public bool Extract( NetworkCredential credential, out MailContactList list )
        {
            bool result = false;
            list = new MailContactList();

            try
            {
                CookieCollection cookies = new CookieCollection();

                // Prepare login form data
                HttpValueCollection loginFormValues = new HttpValueCollection();
                loginFormValues[ "ltmpl" ] = "default";
                loginFormValues[ "ltmplcache" ] = "2";
                loginFormValues[ "continue" ] = ContinueUrl;
                loginFormValues[ "service" ] = "mail";
                loginFormValues[ "rm" ] = "false";
                loginFormValues[ "hl" ] = "en";
                loginFormValues[ "Email" ] = credential.UserName;
                loginFormValues[ "Passwd" ] = credential.Password;
                loginFormValues[ "PersistentCookie" ] = "true";
                loginFormValues[ "rmShown" ] = "1";
                loginFormValues[ "null" ] = "Sign In";

                // Convert to bytes
                byte[] loginPostData = Encoding.UTF8.GetBytes( loginFormValues.ToString( true ) );

                HttpWebRequest loginRequest = ( HttpWebRequest ) WebRequest.Create( LoginUrl );
                loginRequest.Method = "POST";
                loginRequest.UserAgent = UserAgent;
                loginRequest.Referer = LoginRefererUrl;
                loginRequest.ContentType = "application/x-www-form-urlencoded";
                loginRequest.ContentLength = loginPostData.Length;
                loginRequest.AllowAutoRedirect = false;

                // Create cookie container
                loginRequest.CookieContainer = new CookieContainer();

                // Add post data to request
                Stream stream;
                using ( stream = loginRequest.GetRequestStream() )
                {
                    stream.Write( loginPostData, 0, loginPostData.Length );
                }

                HttpWebResponse loginResponse = ( HttpWebResponse ) loginRequest.GetResponse();

                cookies.Add( loginResponse.Cookies );

                // Create request to export Google CSV page
                HttpWebRequest contactsRequest = ( HttpWebRequest ) WebRequest.Create( ExportUrl );
                contactsRequest.Method = "GET";
                contactsRequest.UserAgent = UserAgent;
                contactsRequest.Referer = loginResponse.ResponseUri.ToString();

                // use cookie gotten from login page
                contactsRequest.CookieContainer = new CookieContainer();
                foreach ( Cookie cookie in cookies )
                {
                    contactsRequest.CookieContainer.Add( cookie );
                }

                HttpWebResponse exportResponse = ( HttpWebResponse ) contactsRequest.GetResponse();

                // Read data from response stream
                string csvData;
                using ( Stream responseStream = exportResponse.GetResponseStream() )
                {
                    using ( StreamReader streamRead = new StreamReader( responseStream ) )
                    {
                        csvData = streamRead.ReadToEnd();
                    }
                }

                // parse google csv
                string[] lines = csvData.Split( 'n' );
                foreach ( string line in lines )
                {
                    string[] values = line.Split( ',' );
                    if ( values.Length < 2 )
                    {
                        continue;
                    }

                    MailContact mailContact = new MailContact();
                    mailContact.Email = values[ 1 ];
                    mailContact.Name = values[ 0 ];
                    list.Add( mailContact );
                }

                result = true;
            }
            catch (Exception e)
            {
                throw e;
            }

            return result;
        }

        #endregion
    }
}

asked Aug 2, 2010 at 6:43

ACP's user avatar

I ran into the same problem. I had to change the GmailExtract class in opencontactsnet. Below is the new code which works for me.

public class GmailExtract : IMailContactExtract
    {
        private const string ContinueUrl = "https://mail.google.com/mail/?"; 
        private const string ExportUrl = "https://mail.google.com/mail/contacts/data/export?exportType=ALL&groupToExport=&out=GMAIL_CSV";
        private const string LoginRefererUrl = "https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3Fui%3Dhtml%26zy%3Dl&ltmpl=default&ltmplcache=2";
        private const string LoginUrl = "https://www.google.com/accounts/ServiceLoginAuth?service=mail";
        private const string UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)";

        #region IMailContactExtract Members

        public bool Extract( NetworkCredential credential, out MailContactList list)
        {
            bool result = false;
            list = new MailContactList();

            DateTime jsStartDate = new DateTime(1970, 1, 1);
            TimeSpan endTs = DateTime.Now.Subtract(jsStartDate);
            TimeSpan startTs = DateTime.Now.AddMinutes(-2).Subtract(jsStartDate);

            try
            {
                CookieCollection cookies = new CookieCollection();

                // Prepare login form data
                HttpValueCollection loginFormValues = new HttpValueCollection();
                loginFormValues["Email"] = credential.UserName;
                loginFormValues["Passwd"] = credential.Password;
                loginFormValues["asts"] = "";
                loginFormValues["continue"] = ContinueUrl;
                loginFormValues["dsh"] = "1461574034599761425";
                loginFormValues["hl"] = "en";
                loginFormValues["ltmpl"] = "default";
                loginFormValues["ltmplcache"] = "2";
                loginFormValues["rm"] = "false";
                loginFormValues["rmShown"] = "1";
                loginFormValues["service"] = "mail";
                loginFormValues["signIn"] = "Sign In";
                loginFormValues["scc"] = "1";
                loginFormValues["ss"] = "1";
                loginFormValues["GALX"] = "rBTUs4OAJBI";
                loginFormValues["ltmpl"] = "default";
                loginFormValues["ltmpl"] = "default";

                // Convert to bytes
                byte[] loginPostData = Encoding.UTF8.GetBytes( loginFormValues.ToString( true ) );

                HttpWebRequest loginRequest = ( HttpWebRequest ) WebRequest.Create( LoginUrl );
                loginRequest.Method = "POST";
                loginRequest.UserAgent = UserAgent;
                loginRequest.Referer = LoginRefererUrl;
                loginRequest.ContentType = "application/x-www-form-urlencoded";
                loginRequest.ContentLength = loginPostData.Length;
                loginRequest.AllowAutoRedirect = false;

                // Create cookie container
                loginRequest.CookieContainer = new CookieContainer();
                loginRequest.CookieContainer.Add(new Cookie("GMAIL_LOGIN", "T" + startTs.Milliseconds.ToString() + "/" + startTs.Milliseconds.ToString() + "/" + endTs.Milliseconds.ToString(), "/", ".google.com"));
                loginRequest.CookieContainer.Add(new Cookie("GALX", "rBTUs4OAJBI", "/accounts", ".google.com"));

                // Add post data to request
                Stream stream;
                using ( stream = loginRequest.GetRequestStream())
                {
                    stream.Write( loginPostData, 0, loginPostData.Length);
                }

                HttpWebResponse loginResponse = ( HttpWebResponse ) loginRequest.GetResponse();

                cookies.Add( loginResponse.Cookies );

                // Create request to export Google CSV page
                HttpWebRequest contactsRequest = ( HttpWebRequest ) WebRequest.Create( ExportUrl );
                contactsRequest.Method = "GET";
                contactsRequest.UserAgent = UserAgent;
                contactsRequest.Referer = loginResponse.ResponseUri.ToString();

                // use cookie gotten from login page
                contactsRequest.CookieContainer = new CookieContainer();
                foreach ( Cookie cookie in cookies )
                {
                    contactsRequest.CookieContainer.Add( cookie );
                }

                HttpWebResponse exportResponse = ( HttpWebResponse ) contactsRequest.GetResponse();

                // Read data from response stream
                string csvData;
                using ( Stream responseStream = exportResponse.GetResponseStream())
                {
                    using ( StreamReader streamRead = new StreamReader( responseStream ) )
                    {
                        csvData = streamRead.ReadToEnd();
                    }
                }

                // parse google csv
                string[] lines = csvData.Split( 'n' );
                foreach ( string line in lines )
                {
                    string[] values = line.Split( ',' );
                    if ( values.Length < 2 )
                    {
                        continue;
                    }

                    MailContact mailContact = new MailContact();
                    mailContact.Email = values[ 28 ];
                    mailContact.Name = values[ 0 ];
                    if (mailContact.Email.Trim().Length > 0)
                    {

                         list.Add(mailContact);

                    }
                }

                result = true;
            }
            catch
            {
            }

            return result;
        }

        #endregion
    }

answered Aug 2, 2010 at 7:31

ajay_whiz's user avatar

ajay_whizajay_whiz

17.3k3 gold badges36 silver badges44 bronze badges

5

I am not familiar with google’s api nor do I know C#.
However check the URL you are sending your form to.
Looks like your authentication works. Otherwise you would have recieved a 403.
401 means that you (as an authenticated user) are not allowed to access the requested resource.

answered Aug 2, 2010 at 7:03

sprehn's user avatar

1

10.4.2 401 Unauthorized

The request requires user authentication. The response MUST include a WWW-Authenticate header field (section 14.47) containing a challenge applicable to the requested resource. The client MAY repeat the request with a suitable Authorization header field (section 14.8). If the request already included Authorization credentials, then the 401 response indicates that authorization has been refused for those credentials. If the 401 response contains the same challenge as the prior response, and the user agent has already attempted authentication at least once, then the user SHOULD be presented the entity that was given in the response, since that entity might include relevant diagnostic information.

Is the LoginRefererUrl correctly formed? As that address isn’t found on google servers however the correctly formed version signs me straight into my mail box.

answered Aug 2, 2010 at 7:11

Confussedinwales's user avatar

I am extracting gmail contacts using opencontactsnet. I get The remote server returned an error: (401) Unauthorized. when executing this line

HttpWebResponse exportResponse = ( HttpWebResponse ) contactsRequest.GetResponse();

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Net;
using System.Web.UI;
using System.Web.UI.WebControls;
using OpenContactsNet;

public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {
        GmailExtract gm = new GmailExtract();
        NetworkCredential nw = new NetworkCredential("chendur.pandiya","**");
        MailContactList mc;
        if (gm.Extract(nw, out mc))
        {

        }
        else
        {

        }
     }
}

Here is the complete GmailExtract class,

using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Text;
using Utilities.Web;

namespace OpenContactsNet
{
    public class GmailExtract : IMailContactExtract
    {
        private const string ContinueUrl = "http://mail.google.com/mail?ui=html&amp;zy=l";
        private const string ExportUrl = "https://mail.google.com/mail/contacts/data/export?exportType=ALL&groupToExport=&out=GMAIL_CSV";
        private const string LoginRefererUrl = "https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3Fui%3Dhtml%26zy%3Dl&ltmpl=default&ltmplcache=2";
        private const string LoginUrl = "https://www.google.com/accounts/ServiceLoginAuth?service=mail";
        private const string UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; EmbeddedWB 14.52 from: http://www.bsalsa.com/ EmbeddedWB 14.52; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.1; .NET CLR 1.0.3705; .NET CLR 3.0.04506.30)";

        #region IMailContactExtract Members

        public bool Extract( NetworkCredential credential, out MailContactList list )
        {
            bool result = false;
            list = new MailContactList();

            try
            {
                CookieCollection cookies = new CookieCollection();

                // Prepare login form data
                HttpValueCollection loginFormValues = new HttpValueCollection();
                loginFormValues[ "ltmpl" ] = "default";
                loginFormValues[ "ltmplcache" ] = "2";
                loginFormValues[ "continue" ] = ContinueUrl;
                loginFormValues[ "service" ] = "mail";
                loginFormValues[ "rm" ] = "false";
                loginFormValues[ "hl" ] = "en";
                loginFormValues[ "Email" ] = credential.UserName;
                loginFormValues[ "Passwd" ] = credential.Password;
                loginFormValues[ "PersistentCookie" ] = "true";
                loginFormValues[ "rmShown" ] = "1";
                loginFormValues[ "null" ] = "Sign In";

                // Convert to bytes
                byte[] loginPostData = Encoding.UTF8.GetBytes( loginFormValues.ToString( true ) );

                HttpWebRequest loginRequest = ( HttpWebRequest ) WebRequest.Create( LoginUrl );
                loginRequest.Method = "POST";
                loginRequest.UserAgent = UserAgent;
                loginRequest.Referer = LoginRefererUrl;
                loginRequest.ContentType = "application/x-www-form-urlencoded";
                loginRequest.ContentLength = loginPostData.Length;
                loginRequest.AllowAutoRedirect = false;

                // Create cookie container
                loginRequest.CookieContainer = new CookieContainer();

                // Add post data to request
                Stream stream;
                using ( stream = loginRequest.GetRequestStream() )
                {
                    stream.Write( loginPostData, 0, loginPostData.Length );
                }

                HttpWebResponse loginResponse = ( HttpWebResponse ) loginRequest.GetResponse();

                cookies.Add( loginResponse.Cookies );

                // Create request to export Google CSV page
                HttpWebRequest contactsRequest = ( HttpWebRequest ) WebRequest.Create( ExportUrl );
                contactsRequest.Method = "GET";
                contactsRequest.UserAgent = UserAgent;
                contactsRequest.Referer = loginResponse.ResponseUri.ToString();

                // use cookie gotten from login page
                contactsRequest.CookieContainer = new CookieContainer();
                foreach ( Cookie cookie in cookies )
                {
                    contactsRequest.CookieContainer.Add( cookie );
                }

                HttpWebResponse exportResponse = ( HttpWebResponse ) contactsRequest.GetResponse();

                // Read data from response stream
                string csvData;
                using ( Stream responseStream = exportResponse.GetResponseStream() )
                {
                    using ( StreamReader streamRead = new StreamReader( responseStream ) )
                    {
                        csvData = streamRead.ReadToEnd();
                    }
                }

                // parse google csv
                string[] lines = csvData.Split( 'n' );
                foreach ( string line in lines )
                {
                    string[] values = line.Split( ',' );
                    if ( values.Length < 2 )
                    {
                        continue;
                    }

                    MailContact mailContact = new MailContact();
                    mailContact.Email = values[ 1 ];
                    mailContact.Name = values[ 0 ];
                    list.Add( mailContact );
                }

                result = true;
            }
            catch (Exception e)
            {
                throw e;
            }

            return result;
        }

        #endregion
    }
}

asked Aug 2, 2010 at 6:43

ACP's user avatar

I ran into the same problem. I had to change the GmailExtract class in opencontactsnet. Below is the new code which works for me.

public class GmailExtract : IMailContactExtract
    {
        private const string ContinueUrl = "https://mail.google.com/mail/?"; 
        private const string ExportUrl = "https://mail.google.com/mail/contacts/data/export?exportType=ALL&groupToExport=&out=GMAIL_CSV";
        private const string LoginRefererUrl = "https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3Fui%3Dhtml%26zy%3Dl&ltmpl=default&ltmplcache=2";
        private const string LoginUrl = "https://www.google.com/accounts/ServiceLoginAuth?service=mail";
        private const string UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)";

        #region IMailContactExtract Members

        public bool Extract( NetworkCredential credential, out MailContactList list)
        {
            bool result = false;
            list = new MailContactList();

            DateTime jsStartDate = new DateTime(1970, 1, 1);
            TimeSpan endTs = DateTime.Now.Subtract(jsStartDate);
            TimeSpan startTs = DateTime.Now.AddMinutes(-2).Subtract(jsStartDate);

            try
            {
                CookieCollection cookies = new CookieCollection();

                // Prepare login form data
                HttpValueCollection loginFormValues = new HttpValueCollection();
                loginFormValues["Email"] = credential.UserName;
                loginFormValues["Passwd"] = credential.Password;
                loginFormValues["asts"] = "";
                loginFormValues["continue"] = ContinueUrl;
                loginFormValues["dsh"] = "1461574034599761425";
                loginFormValues["hl"] = "en";
                loginFormValues["ltmpl"] = "default";
                loginFormValues["ltmplcache"] = "2";
                loginFormValues["rm"] = "false";
                loginFormValues["rmShown"] = "1";
                loginFormValues["service"] = "mail";
                loginFormValues["signIn"] = "Sign In";
                loginFormValues["scc"] = "1";
                loginFormValues["ss"] = "1";
                loginFormValues["GALX"] = "rBTUs4OAJBI";
                loginFormValues["ltmpl"] = "default";
                loginFormValues["ltmpl"] = "default";

                // Convert to bytes
                byte[] loginPostData = Encoding.UTF8.GetBytes( loginFormValues.ToString( true ) );

                HttpWebRequest loginRequest = ( HttpWebRequest ) WebRequest.Create( LoginUrl );
                loginRequest.Method = "POST";
                loginRequest.UserAgent = UserAgent;
                loginRequest.Referer = LoginRefererUrl;
                loginRequest.ContentType = "application/x-www-form-urlencoded";
                loginRequest.ContentLength = loginPostData.Length;
                loginRequest.AllowAutoRedirect = false;

                // Create cookie container
                loginRequest.CookieContainer = new CookieContainer();
                loginRequest.CookieContainer.Add(new Cookie("GMAIL_LOGIN", "T" + startTs.Milliseconds.ToString() + "/" + startTs.Milliseconds.ToString() + "/" + endTs.Milliseconds.ToString(), "/", ".google.com"));
                loginRequest.CookieContainer.Add(new Cookie("GALX", "rBTUs4OAJBI", "/accounts", ".google.com"));

                // Add post data to request
                Stream stream;
                using ( stream = loginRequest.GetRequestStream())
                {
                    stream.Write( loginPostData, 0, loginPostData.Length);
                }

                HttpWebResponse loginResponse = ( HttpWebResponse ) loginRequest.GetResponse();

                cookies.Add( loginResponse.Cookies );

                // Create request to export Google CSV page
                HttpWebRequest contactsRequest = ( HttpWebRequest ) WebRequest.Create( ExportUrl );
                contactsRequest.Method = "GET";
                contactsRequest.UserAgent = UserAgent;
                contactsRequest.Referer = loginResponse.ResponseUri.ToString();

                // use cookie gotten from login page
                contactsRequest.CookieContainer = new CookieContainer();
                foreach ( Cookie cookie in cookies )
                {
                    contactsRequest.CookieContainer.Add( cookie );
                }

                HttpWebResponse exportResponse = ( HttpWebResponse ) contactsRequest.GetResponse();

                // Read data from response stream
                string csvData;
                using ( Stream responseStream = exportResponse.GetResponseStream())
                {
                    using ( StreamReader streamRead = new StreamReader( responseStream ) )
                    {
                        csvData = streamRead.ReadToEnd();
                    }
                }

                // parse google csv
                string[] lines = csvData.Split( 'n' );
                foreach ( string line in lines )
                {
                    string[] values = line.Split( ',' );
                    if ( values.Length < 2 )
                    {
                        continue;
                    }

                    MailContact mailContact = new MailContact();
                    mailContact.Email = values[ 28 ];
                    mailContact.Name = values[ 0 ];
                    if (mailContact.Email.Trim().Length > 0)
                    {

                         list.Add(mailContact);

                    }
                }

                result = true;
            }
            catch
            {
            }

            return result;
        }

        #endregion
    }

answered Aug 2, 2010 at 7:31

ajay_whiz's user avatar

ajay_whizajay_whiz

17.3k3 gold badges36 silver badges44 bronze badges

5

I am not familiar with google’s api nor do I know C#.
However check the URL you are sending your form to.
Looks like your authentication works. Otherwise you would have recieved a 403.
401 means that you (as an authenticated user) are not allowed to access the requested resource.

answered Aug 2, 2010 at 7:03

sprehn's user avatar

1

10.4.2 401 Unauthorized

The request requires user authentication. The response MUST include a WWW-Authenticate header field (section 14.47) containing a challenge applicable to the requested resource. The client MAY repeat the request with a suitable Authorization header field (section 14.8). If the request already included Authorization credentials, then the 401 response indicates that authorization has been refused for those credentials. If the 401 response contains the same challenge as the prior response, and the user agent has already attempted authentication at least once, then the user SHOULD be presented the entity that was given in the response, since that entity might include relevant diagnostic information.

Is the LoginRefererUrl correctly formed? As that address isn’t found on google servers however the correctly formed version signs me straight into my mail box.

answered Aug 2, 2010 at 7:11

Confussedinwales's user avatar

BaLahmuT

85 / 29 / 16

Регистрация: 01.06.2019

Сообщений: 608

1

14.04.2021, 22:01. Показов 8693. Ответов 8

Метки нет (Все метки)


Получаю погоду с api, при запуске представления вылетает ошибка: System.Net.WebException: «Удаленный сервер возвратил ошибку: (401) Несанкционированный.»

Модель:

Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 public class Weather
    {
        public Object getWeather()
        {
            string url = "http://api.openweathermap.org/data/2.5/weather?q=Kharkiv&APPID=03e45b7211028e0119ce0b1b3fa9fa90units=imperial";
 
            var client = new WebClient();
            var content = client.DownloadString(url);
 
            var serializer = new JavaScriptSerializer();
            var jsonContent = serializer.Deserialize<Object>(content);
 
            return jsonContent;
        }
    }

Контроллер:

Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class HomeController : Controller
    {
        // GET: Home
        public ActionResult Index()
        {
            return View();
        }
 
        public ActionResult Api()
        {
            return View();
        }
 
        public ActionResult Weather()
        {
            return View();
        }
 
        public JsonResult GetWeather()
        {
            Weather weath = new Weather();
            return Json(weath.getWeather(), JsonRequestBehavior.AllowGet);
        }
    }

Представление:

Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
@{ 
    ViewBag.Title = "Weather"; 
}
 
<h2>Weather</h2>
<div class="col-md-12">
    <h1>Current Conditions in <span data-bind="text:name"></span></h1>
</div>
 
<div class="col-md-12">
    Temperature is <span data-bind="text:main.temp"></span>&deg; F
</div>
 
<script>
    var weather = Object();
    $(document).ready(function () {
            $.get("@Url.Action("GetWeather", "Home")", function (response) {
                console.log(response);
                weather = ko.mapping.fromJS(response);
                ko.applyBindings(weather);
 
            });
    });
 
</script>

Миниатюры

Ошибка "(401) Несанкционированный"
 

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



647 / 582 / 170

Регистрация: 17.07.2012

Сообщений: 1,648

Записей в блоге: 1

14.04.2021, 23:25

2

Rudman132, 401 отдает API. Видимо ему ключ какой-то нужен.



1



BaLahmuT

85 / 29 / 16

Регистрация: 01.06.2019

Сообщений: 608

15.04.2021, 15:13

 [ТС]

3

Cupko, Хмм..странно, если api ключ вынести в отдельную переменную то все работает

C#
1
string url = "http://api.openweathermap.org/data/2.5/weather?q=Cairo&APPID=" + key + "&units=imperial";



0



922 / 600 / 149

Регистрация: 09.09.2011

Сообщений: 1,879

Записей в блоге: 2

15.04.2021, 18:47

4

Лучший ответ Сообщение было отмечено Rudman132 как решение

Решение

Цитата
Сообщение от Rudman132
Посмотреть сообщение

странно, если api ключ вынести в отдельную переменную то все работает

Ничего странного. Пропущен разделитель.
&APPID=03e45b7211028e0119ce0b1b3fa9fa90<-тут-->units=imperial
Так что и первый вариант бы работал
Но второй правильнее с точки зрения программирования. Вы ж ключ менять будете и не раз. Не в тексте же его менять.



1



BaLahmuT

85 / 29 / 16

Регистрация: 01.06.2019

Сообщений: 608

15.04.2021, 23:09

 [ТС]

5

Вопрос такой, как привязать форму к api? чтоб город можно было указывать любой

C#
1
string url = "http://api.openweathermap.org/data/2.5/weather?q=Cairo&APPID=" + key + "&units=imperial";

Вот форма:

Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
form action="Index" method="post" style="text-align: center">
        <table>
            <tr>
                <td style="font-size:18px">Enter city:</td>
                <td>
                    <input type="text" name="city" />
                    <input type="submit" id="search" value="Search"/>
                </td>
            </tr>
        </table>
        <hr />
    </form>



0



922 / 600 / 149

Регистрация: 09.09.2011

Сообщений: 1,879

Записей в блоге: 2

16.04.2021, 23:14

6

Цитата
Сообщение от Rudman132
Посмотреть сообщение

Вопрос такой, как привязать форму к api? чтоб город можно было указывать любой

Я давно не работал с погодным апи. Но наверное это с ним и не должно быть связано.
Объясните причину вопроса? Что такое привязать форму к АПИ? Или так — Зачем нужно привязать что-то к форме?

Форма — ввод города. Всё. Роль на этом заканчивается.
Запрос вы отправляете через бакэнд. Там вы и подставляете ключ. Собственно на бакэнде вы и можете манипулировать данными так как вам нужно.
И поэтому не понятно что за проблема вообще «можно было указывать любой город»



0



BaLahmuT

85 / 29 / 16

Регистрация: 01.06.2019

Сообщений: 608

17.04.2021, 11:04

 [ТС]

7

HF, Может неправильно сформулировал, имел ввиду: как текст из inputa подставить вместо

C#
1
q=Cairo



0



922 / 600 / 149

Регистрация: 09.09.2011

Сообщений: 1,879

Записей в блоге: 2

17.04.2021, 22:12

8

Лучший ответ Сообщение было отмечено Rudman132 как решение

Решение

Цитата
Сообщение от Rudman132
Посмотреть сообщение

Может неправильно сформулировал, имел ввиду: как текст из inputa подставить вместо

Судя по представлению — у вас запрос сразу уходит. Значит
1) вы должны сделать событие onclick на кнопку формы
2) и отправлять запрос исходя из данных этой формы. А точнее поля City
Далее запрос. Сейчас он у вас вызывает голый метод. А вы же хотите город. Значит и должны город передавать.
3) обновляйте запрос $.get("@Url.Action("GetWeather", "Home")" и добавляйте аргументом поле «city» из формы
Соответственно и контроллер должен начать принимать это поле
4) добавляйте в метод контроллера параметр string city
5) ваша переменная uri теперь должна подставлять значение city в ключ «q» аналогично ключу авторизации.



0



85 / 29 / 16

Регистрация: 01.06.2019

Сообщений: 608

17.04.2021, 23:17

 [ТС]

9

HF, понял, спасибо!



0



  • Remove From My Forums
  • Question

  • Hi,

    We are trying to deploy the provider hosted app in server environment . we are getting the «The remote server returned an error :(401) unauthorized» error after deploy the app in server.

    stack Trace:

    [webException:Te remote server returned an error:(401) UnAuthorized.]

    System.Net.HeepWebRequest.GetResponse().

    Followed the same MSDN steps , but sill same error. We have attached the certificate and using the same issuer ID in the app web.config.

    Verified the IIS setting and still getting the same error when we call the «Clientcontext.ExecuteQuery()» method.

    Same code is working fine in my Local dev environment.

    If anyone have idea about this issue, please let me know.

    Thank you,

    Mylsamy

Answers

  • Hi ,

    Thank you for your response. We have tried all the options and everything is same (Client ID,Issuer ID...etc) and finally figured out the issue.

    The below link saved my day.

    http://msdn.microsoft.com/en-us/library/office/dn762439(v=office.15).aspx

    In "TokenHelper.cs" GetRealmFromTargetUrl method always return null and

    When we analyze the issue we found some variable name assigned for "Realm" Instead of GUID in SP server.

    Power shell command to get the Realm in SP server:  Get-SPAuthenticationRealm

    We have followed below article to generate the new GUID for realm.

    http://technet.microsoft.com/en-us/library/jj219756(v=office.15).aspx

    $c =Get-SPServiceContext -Site "http://<websiteurl>"

    Set-SPAuthenticationRealm -ServiceContext $c -Realm "a686d436-9f16-42db-09b7-cb578e110ccd".

    Thankyou,

    Mylsamy

    • Marked as answer by

      Friday, January 16, 2015 8:09 PM

  • Remove From My Forums
  • Question

  • Hi,

    We are trying to deploy the provider hosted app in server environment . we are getting the «The remote server returned an error :(401) unauthorized» error after deploy the app in server.

    stack Trace:

    [webException:Te remote server returned an error:(401) UnAuthorized.]

    System.Net.HeepWebRequest.GetResponse().

    Followed the same MSDN steps , but sill same error. We have attached the certificate and using the same issuer ID in the app web.config.

    Verified the IIS setting and still getting the same error when we call the «Clientcontext.ExecuteQuery()» method.

    Same code is working fine in my Local dev environment.

    If anyone have idea about this issue, please let me know.

    Thank you,

    Mylsamy

Answers

  • Hi ,

    Thank you for your response. We have tried all the options and everything is same (Client ID,Issuer ID...etc) and finally figured out the issue.

    The below link saved my day.

    http://msdn.microsoft.com/en-us/library/office/dn762439(v=office.15).aspx

    In "TokenHelper.cs" GetRealmFromTargetUrl method always return null and

    When we analyze the issue we found some variable name assigned for "Realm" Instead of GUID in SP server.

    Power shell command to get the Realm in SP server:  Get-SPAuthenticationRealm

    We have followed below article to generate the new GUID for realm.

    http://technet.microsoft.com/en-us/library/jj219756(v=office.15).aspx

    $c =Get-SPServiceContext -Site "http://<websiteurl>"

    Set-SPAuthenticationRealm -ServiceContext $c -Realm "a686d436-9f16-42db-09b7-cb578e110ccd".

    Thankyou,

    Mylsamy

    • Marked as answer by

      Friday, January 16, 2015 8:09 PM

Старый
21.07.2015, 11:26

 

#1
 

Участник

Аватар для raniel

:(
Проблема с сервисами (401)


Добрый день.
Необходимо было написать простенький http сервис. Всё сделал как написано тут: http://blogs.msdn.com/b/axsupport/ar…-services.aspx

Полученную во входящих портах ссылку открыл в экплорее. там 2 ссылки

http://xxx.xxxxx.ru/MicrosoftDynamic…rvice.svc?wsdl
и
http://xxx.xxxxx.ru/MicrosoftDynamic…svc?singleWsdl
Первая возвращает xml файл. Вторая возвратила следующую ошибку: «
The server was unable to process the request due to an internal error. For more information about the error, either turn on IncludeExceptionDetailInFaults (either from ServiceBehaviorAttribute or from the <serviceDebug> configuration behavior) on the server in order to send the exception information back to the client, or turn on tracing as per the Microsoft .NET Framework SDK documentation and inspect the server trace logs.»
При попытке соединиться через написаный проект в VS выходит ошибка что то вроде «Запрос HTTP не разрешён для схемы аутентификации клиента «Basic». От сервера получен заголовок аутентификации «Basic realm = «»xxxx.xxx.ru»». —> System.Net.WebExceptions: Удалённый сервер возвратил ошибку: (401) Несанкционированный. …. и дальше многА букав.
При попытке подключиться SoapUI долго просит вбить логин/пароль…когда нервы не выдерживаю и нажимаю отмена он долго думает и возвращает ошибку :»Source: null Error: type ‘ArrayOfKeyValueOfstringstring@http://schemas.microsoft.com/2003/10/Serialization/Arrays’ not found.»
Логин и Пароль верные.
Все настройки я сделал как описано в статье.
Вопрос, где косяк? Сервис элементарный. По одному параметру нахожу значение и возвращаю 3 найденные переменные.
У кого какие мысли?

Старый
21.07.2015, 12:46

 

#2
 

Участник

 

Регистрация: 28.11.2005

Адрес: Москва

Записей в блоге: 3

У SoapUI есть известные проблемы аутентификации при работе с сервисами AIF, см. также Web services и SOAP

Старый
21.07.2015, 13:38

 

#3
 

Участник

Аватар для raniel

Да. Я в курсе что там всё не просто. Нашёл ссылку на похожую тему [url=http://axforum.info/forums/showthread.php?t=48257[/URL] Попробовал подключиться через WCF Test Client]Web services и SOAP. Вышла вот такая ошибка:
«c:UsersxxxAppDataLocalTempTest Client Projects12.074c20062-1c52-4454-983c-533474f2acc8Client.cs(302,73) : error CS0234: Имя типа или пространства имен «Application» отсутствует в пространстве имен «Microsoft.Dynamics.Ax» (пропущена ссылка на сборку?)»
Что за пространство имён? Где что я забыл прописать?

Старый
22.07.2015, 10:33

 

#4
 

Участник

Аватар для Dreadlock

 

Регистрация: 07.05.2009

Адрес: Москва

Про Basic Authentication написано здесь

Про SOAP UI надо делать так:

Предположим мой логин Test и пароль 1234qwer, и ссылка на wsdl http://MyTestServer:8101/MicrosoftDy…xppservice.svc

В SoapUI указываем ссылку http://

Test:1234qwer@MyTestServer:8101/MicrosoftDynamicsAXAif60/TestService/xppservice.svc?wsdl

Когда SoapUI сгенерит контракт, надо будет перед отправкой сервису контракта указать теже учетные данные мой логин Test и пароль на вкладке Authorization:
Название: Снимок.JPG
Просмотров: 2814

Размер: 23.9 Кб

Цитата:

отсутствует в пространстве имен «Microsoft.Dynamics.Ax» (пропущена ссылка на сборку?)»

Сейчас ковыряю такую же проблему

За это сообщение автора поблагодарили: raniel (1).

Старый
22.07.2015, 10:41

 

#5
 

Участник

Аватар для Dreadlock

 

Регистрация: 07.05.2009

Адрес: Москва

Цитата:

отсутствует в пространстве имен «Microsoft.Dynamics.Ax» (пропущена ссылка на сборку?)»

Кстати, попробуйте сделать полный CIL!

Старый
22.07.2015, 10:48

 

#6
 

Участник

Аватар для raniel

Angry


Цитата:

Сообщение от Dreadlock
Посмотреть сообщение

Кстати, попробуйте сделать полный CIL!

Спасибо за активную помощь. CIL полный я делал уже ни раз… .
Есть Примеры как решить проблему с NameSpace, но это для C#… типа нужно указать, но у нас то всё автоматом берётся…все эти ссылки уже указаны в макросе Aif. И в этот процесс не можем/не должны вмешиваться.
Кстати вот ссылка на подобную проблему….но видимо я что-то не так делаю, либо незнаю уже…
Axilicious:AX2012 R2 Enterprise portal installation issues – Part 1

Старый
23.07.2015, 09:36

 

#7
 

Участник

Аватар для Dreadlock

 

Регистрация: 07.05.2009

Адрес: Москва

Цитата:

Кстати вот ссылка на подобную проблему….но видимо я что-то не так делаю, либо незнаю уже…

Это вам не надо.

Вы как сервис сделали? Через отдельный класс или используя Wizard?

Старый
23.07.2015, 13:46

 

#8
 

Участник

Аватар для raniel

Через отдельный класс. Простенький сервис. На входе один атрибут на выходе 3 параметра(типы простые).

Старый
23.07.2015, 13:52

 

#9
 

Участник

Аватар для Dreadlock

 

Регистрация: 07.05.2009

Адрес: Москва

А вы сделали как написано тут:

Цитата:

The server was unable to process the request due to an internal error. For more information about the error, either turn on IncludeExceptionDetailInFaults (either from ServiceBehaviorAttribute or from the <serviceDebug> configuration behavior) on the server in order to send the exception information back to the client, or turn on tracing as per the Microsoft .NET Framework SDK documentation and inspect the server trace logs.»

Т.е. Нажмите на изображение для увеличения
Название: Снимок.JPG
Просмотров: 474
Размер:	52.1 Кб
ID:	9348

Старый
23.07.2015, 14:07

 

#10
 

Участник

Аватар для raniel

Да сделал. И получил подробности ошибки … когда нажимаю вторую ссылку http://xxx.xxxxx.ru/MicrosoftDynamic…svc?singleWsdl получаю вот такой ответ

Цитата:

The service encountered an error.
An ExceptionDetail, likely created by IncludeExceptionDetailInFaults=true, whose value is:System.NotSupportedException: A single WSDL document could not be generated for this service. Multiple service contract namespaces were found (http://schemas.microsoft.com/netfx/2009/05/routing, http://tempuri.org). Ensure that all your service contracts have the same namespace. at System.ServiceModel.Description.WsdlHelper.VerifyContractNamespace(List`1 wsdls) at System.ServiceModel.Description.WsdlHelper.GetSingleWsdl(MetadataSet metadataSet) at System.ServiceModel.Description.ServiceMetadataExtension.EnsureSingleWsdlInitialized() at System.ServiceModel.Description.ServiceMetadataExtension.HttpGetImpl.TryHandleMetadataRequest(Message httpGetRequest, String[] queries, Message& replyMessage) at System.ServiceModel.Description.ServiceMetadataExtension.HttpGetImpl.ProcessHttpRequest(Message httpGetRequest) at SyncInvokeGet(Object , Object[] , Object[] ) at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs) at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc) at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc) at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc& rpc) at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)

Старый
23.07.2015, 14:11

 

#11
 

Участник

Аватар для raniel

Вот метод из моего сервиса:

X++:

[SysEntryPointAttribute(true),
AifCollectionTypeAttribute('_salesAgreementId', Types::String, extendedtypestr(SalesAgreementId))]
public ConsumerContract PR_LS_INFO_DATA(SalesAgreementId _salesAgreementId)
{
    ConsumerContract contract;
    SalesAgreementHeaderAddInform salesAgreementHeaderAddInform;
    salesAgreementHeaderAddInform =  SalesAgreementHeaderAddInform::findSalesNumberSequence(_salesAgreementId);
    contract = new ConsumerContract();
    if(!energSalesAgreementHeaderAddInform)
        throw error (strFmt("@XXX4415",_salesAgreementId));
    else
    {
        contract.parmSalesAgreementId(salesAgreementHeaderAddInform.SalesNumberSequence);
        contract.parmName(salesAgreementHeaderAddInform.name());
        contract.parmAddress(salesAgreementHeaderAddInform.addresOtherFormatted());
    }
 
    return contract;
}

Последний раз редактировалось raniel; 23.07.2015 в 14:13.

Старый
23.07.2015, 14:15

 

#12
 

Участник

Аватар для Dreadlock

 

Регистрация: 07.05.2009

Адрес: Москва

А так?

X++:

[SysEntryPointAttribute(false),
AifCollectionTypeAttribute('_salesAgreementId', Types::String, extendedtypestr(SalesAgreementId)),
AifCollectionTypeAttribute('return', Types::Class, classStr(ConsumerContract))]

Старый
23.07.2015, 14:22

 

#13
 

Участник

Аватар для raniel

Цитата:

Сообщение от Dreadlock
Посмотреть сообщение

А так?

X++:

[SysEntryPointAttribute(false),
AifCollectionTypeAttribute('_salesAgreementId', Types::String, extendedtypestr(SalesAgreementId)),
AifCollectionTypeAttribute('return', Types::Class, classStr(ConsumerContract))]

Вообще ничего не поменялось…Всё отцилил, заново развернул…. Без изменений.

Старый
23.07.2015, 14:29

 

#14
 

Участник

Аватар для Dreadlock

 

Регистрация: 07.05.2009

Адрес: Москва

У меня была такая ошибка, но сервис работал.
А в группу сервисов вы добавили один сервис или несколько? Судя по ошибке у вас используются разные контракты.

Старый
23.07.2015, 14:32

 

#15
 

Участник

Аватар для raniel

Это тестовый пример. В классе один метод. Я его один и добавляю в сервис. Есть одноимённый метод в другом совсем классе. и он нигде не используется. Не думаю что они конфликтуют.
ЗЫ На всякий случай в другом классе этот метод переименовал, а связанный сервис выключил…Результата ноль


Последний раз редактировалось raniel; 23.07.2015 в 14:44.

Появление сообщения об ошибке 401 Unauthorized Error («отказ в доступе») при открытии страницы сайта означает неверную авторизацию или аутентификацию пользователя на стороне сервера при обращении к определенному url-адресу. Чаще всего она возникает при ошибочном вводе имени и/или пароля посетителем ресурса при входе в свой аккаунт. Другой причиной являются неправильные настройки, допущенные при администрировании web-ресурса. Данная ошибка отображается в браузере в виде отдельной страницы с соответствующим описанием. Некоторые разработчики интернет-ресурсов, в особенности крупных порталов, вводят собственную дополнительную кодировку данного сбоя:

  • 401 Unauthorized;
  • Authorization Required;
  • HTTP Error 401 – Ошибка авторизации.

Попробуем разобраться с наиболее распространенными причинами возникновения данной ошибки кода HTTP-соединения и обсудим способы их решения.

Причины появления ошибки сервера 401 и способы ее устранения на стороне пользователя

При доступе к некоторым сайтам (или отдельным страницам этих сайтов), посетитель должен пройти определенные этапы получения прав:

  1. Идентификация – получение вашей учетной записи («identity») по username/login или email.
  2. Аутентификация («authentic») – проверка того, что вы знаете пароль от этой учетной записи.
  3. Авторизация – проверка вашей роли (статуса) в системе и решение о предоставлении доступа к запрошенной странице или ресурсу на определенных условиях.

Большинство пользователей сохраняют свои данные по умолчанию в истории браузеров, что позволяет быстро идентифицироваться на наиболее часто посещаемых страницах и синхронизировать настройки между устройствами. Данный способ удобен для серфинга в интернете, но может привести к проблемам с безопасностью доступа к конфиденциальной информации. При наличии большого количества авторизованных регистрационных данных к различным сайтам используйте надежный мастер-пароль, который закрывает доступ к сохраненной в браузере информации.

Наиболее распространенной причиной появления ошибки с кодом 401 для рядового пользователя является ввод неверных данных при посещении определенного ресурса. В этом и других случаях нужно попробовать сделать следующее:

  1. Проверьте в адресной строке правильность написания URL. Особенно это касается перехода на подстраницы сайта, требующие авторизации. Введите правильный адрес. Если переход на страницу осуществлялся после входа в аккаунт, разлогинитесь, вернитесь на главную страницу и произведите повторный вход с правильными учетными данными.
  2. При осуществлении входа с сохраненными данными пользователя и появлении ошибки сервера 401 проверьте их корректность в соответствующих настройках данного браузера. Возможно, авторизационные данные были вами изменены в другом браузере. Также можно очистить кэш, удалить cookies и повторить попытку входа. При удалении истории браузера или очистке кэша потребуется ручное введение логина и пароля для получения доступа. Если вы не помните пароль, пройдите процедуру восстановления, следуя инструкциям.
  3. Если вы считаете, что вводите правильные регистрационные данные, но не можете получить доступ к сайту, обратитесь к администратору ресурса. В этом случае лучше всего сделать скриншот проблемной страницы.
  4. Иногда блокировка происходит на стороне провайдера, что тоже приводит к отказу в доступе и появлению сообщения с кодировкой 401. Для проверки можно попробовать авторизоваться на том же ресурсе с альтернативного ip-адреса (например, используя VPN). При подтверждении блокировки трафика свяжитесь с провайдером и следуйте его инструкциям.

Некоторые крупные интернет-ресурсы с большим количеством подписчиков используют дополнительные настройки для обеспечения безопасности доступа. К примеру, ваш аккаунт может быть заблокирован при многократных попытках неудачной авторизации. Слишком частые попытки законнектиться могут быть восприняты как действия бота. В этом случае вы увидите соответствующее сообщение, но можете быть просто переадресованы на страницу с кодом 401. Свяжитесь с администратором сайта и решите проблему.

Иногда простая перезагрузка проблемной страницы, выход из текущей сессии или использование другого веб-браузера полностью решают проблему с 401 ошибкой авторизации.

Ошибка 401 - отказ в доступе

Устранение ошибки 401 администратором веб-ресурса 

Для владельцев сайтов, столкнувшихся с появлением ошибки отказа доступа 401, решить ее порою намного сложнее, чем обычному посетителю ресурса. Есть несколько рекомендаций, которые помогут в этом:

  • Обращение в службу поддержки хостинга сайта. Как и в случае возникновения проблем с провайдером, лучше всего подробно описать последовательность действий, приведших к появлению ошибки 401, приложить скриншот.
  • При отсутствии проблем на стороне хостинг-провайдера можно внести следующие изменения в настройки сайта с помощью строки Disallow:/адрес проблемной страницы. Запретить индексацию страницам с ошибкой в «rоbоts.txt», после чего добавить в файл «.htассеss» строку такого типа:
Redirect 301 /oldpage.html http://site.com/newpage.html.

Где в поле /oldpage.html прописывается адрес проблемной страницы, а в http://site.com/newpage.html адрес страницы авторизации.

Таким образом вы перенаправите пользователей со всех страниц, которые выдают ошибку 401, на страницу начальной авторизации.

  • Если после выполнения предыдущих рекомендаций пользователи при попытках авторизации все равно видят ошибку 401, то найдите на сервере файл «php.ini» и увеличьте время жизни сессии, изменив значения следующих параметров: «session.gc_maxlifetime» и «session.cookie_lifetime» на 1440 и 0 соответственно.
  • Разработчики веб-ресурсов могут использовать более сложные методы авторизации и аутентификации доступа для создания дополнительной защиты по протоколу HTTP. Если устранить сбой простыми методами администрирования не удается, следует обратиться к специалистам, создававшим сайт, для внесения соответствующих изменений в код.

Хотя ошибка 401 и является проблемой на стороне клиента, ошибка пользователя на стороне сервера может привести к ложному требованию входа в систему. К примеру, сетевой администратор разрешит аутентификацию входа в систему всем пользователям, даже если это не требуется. В таком случае сообщение о несанкционированном доступе будет отображаться для всех, кто посещает сайт. Баг устраняется внесением соответствующих изменений в настройки.

Дополнительная информация об ошибке с кодом 401

Веб-серверы под управлением Microsoft IIS могут предоставить дополнительные данные об ошибке 401 Unauthorized в виде второго ряда цифр:

  • 401, 1 – войти не удалось;
  • 401, 2 – ошибка входа в систему из-за конфигурации сервера;
  • 401, 3 – несанкционированный доступ из-за ACL на ресурс;
  • 401, 501 – доступ запрещен: слишком много запросов с одного и того же клиентского IP; ограничение динамического IP-адреса – достигнут предел одновременных запросов и т.д.

Более подробную информацию об ошибке сервера 401 при использовании обычной проверки подлинности для подключения к веб-узлу, который размещен в службе MS IIS, смотрите здесь. 

Следующие сообщения также являются ошибками на стороне клиента и относятся к 401 ошибке:

  • 400 Bad Request; 
  • 403 Forbidden; 
  • 404 Not Found;
  • 408 Request Timeout.

Как видим, появление ошибки авторизации 401 Unauthorized не является критичным для рядового посетителя сайта и чаще всего устраняется самыми простыми способами. В более сложной ситуации оказываются администраторы и владельцы интернет-ресурсов, но и они в 100% случаев разберутся с данным багом путем изменения настроек или корректировки html-кода с привлечением разработчика сайта. 

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • Удаленный рабочий стол код ошибки 0х204
  • Удаленный рабочий стол код ошибки 0x516