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

Как исправить ошибку сервера 401 Unauthorized (Отказ в доступе): пошаговая инструкция. Причины появления ошибки 401. Как устранить проблему со стороны и клиента и владельца сайта.

Появление сообщения об ошибке 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-кода с привлечением разработчика сайта. 

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.3k4 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.3k4 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. Показов 8839. Ответов 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,649

Записей в блоге: 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



923 / 600 / 150

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

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

Записей в блоге: 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



923 / 600 / 150

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

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

Записей в блоге: 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



923 / 600 / 150

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

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

Записей в блоге: 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



28.12.2019Веб-технологии, Веб-технологии Вопросы

401 Несанкционированная ошибка — это ошибка кода состояния HTTP, из-за которой в запросе, отправленном клиентом на сервер, отсутствуют действительные учетные данные для аутентификации . Это может быть представлено как 401 Несанкционированный, Требуется Авторизация, Ошибка HTTP 401- Несанкционированный. Это означает, что запрос не может быть аутентифицирован. Он состоит из www-Authenticate header который содержит подсказку о том, как правильно авторизоваться.

401 Произошла неавторизованная ошибка: эта ошибка может возникать по причинам, описанным ниже:

  • Может случиться, что клиент не предоставит серверу надлежащие учетные данные для аутентификации в течение времени запроса.
  • Это может произойти, когда сервер отклоняет запрос клиента по некоторым причинам, даже если клиент предоставляет надлежащие учетные данные для проверки подлинности.
  • Когда клиент по каким-то причинам заблокирован сервером.

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

  • Проверьте URL: из-за ручных ошибок при вводе URL может произойти несанкционированная ошибка 401. Следовательно, проверив URL и исправив ошибки в нем, мы исправим статус ошибки 401.
  • Очистка DNS: ошибки в DNS также иногда создают 401 статус ошибки. Поэтому очистка DNS также исправит эту ошибку. В Windows DNS можно очистить, введя ipconfig / flushdns в командной строке и нажав ENTER.
  • Очистить cookie браузера: в некоторых ситуациях cookie могут работать некорректно, что приводит к неправильной аутентификации сервера. Таким образом, очистив куки, можно исправить ошибку.
  • Выход из системы и повторный вход в систему: эта ошибка также может возникать во время обслуживания веб-сайтов. Следовательно, посещение веб-сайта и повторный вход в систему с предоставлением учетных данных также могут исправить эту ошибку.
  • Ошибка веб-сайта: Несколько раз все вышеперечисленные вещи были хорошими или точными, но вы все равно получите 401 Несанкционированную ошибку, которая является ошибкой веб-сайта. В этот раз вам нужно связаться с веб-мастером этого сайта и сообщить, что сервер не работает. Вы можете отправить их по электронной почте на адрес webmaster@webmaster.com заменив webmaster@webmaster.com на веб-сайт, или вы можете увидеть опцию «связаться с нами» на любом веб-сайте, через который вы можете сообщить им.

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

  • 401.1: эта ошибка означает, что вход в систему не выполнен по некоторым причинам.
  • 401.2: эта ошибка означает, что вход в систему не выполнен из-за конфигурации сервера.
  • 401.3: это сообщение об ошибке означает, что вход в систему не выполнен из-за ACL (списка контроля доступа) на ресурсе.
  • 401.3: это сообщение об ошибке означает, что фильтр не прошел авторизацию.
  • 401.501: Эта ошибка означает, что клиентом было сгенерировано слишком много запросов, т. Е. Клиент достиг максимального предела запросов.
  • 401.502: эта ошибка возникает, когда какой-либо конкретный клиент (sam IP) несколько раз запрашивает на одном сервере, что достигнуто ограничение частоты одновременных запросов динамического ограничения IP. Тогда эта ошибка произойдет
  • 401.503: эта ошибка означает, что IP-адрес клиента находится в списке запрещенных IP-адресов на стороне сервера.
  • 401.504: эта ошибка означает, что имя хоста клиента находится в списке запрещенных IP-адресов на стороне сервера.

Рекомендуемые посты:

  • Как проверить URL на 404 ошибки в PHP?
  • Обработка ошибок в PHP
  • JQuery | Метод error ()
  • JavaScript | Имя ошибки Свойство
  • Обработка ошибок в Perl
  • HTML | DOM Audio error Свойство
  • JavaScript | Сообщение об ошибке Свойство
  • HTML | DOM Video error Свойство
  • Node.js | Функция console.error ()
  • Почему ошибка $ не определена произошла в jQuery?
  • Python | 404 Обработка ошибок во Flask
  • HTML | DOM метод console.error ()
  • Как устранить неполадки общих кодов ошибок HTTP?
  • Как решить ошибку «Отправить не является функцией» в JavaScript?
  • Javascript | Ошибка и исключительная обработка с примерами

Как исправить несанкционированную ошибку 401?

0.00 (0%) 0 votes

BaseUrl=https://diadoc-api.kontur.ru, PathAndQuery=/Authenticate, AdditionalMessage=Certificate with thumbprint *** is not authorized., StatusCode=Unauthorized, DiadocErrorCode: Http.Auth.Auth.CertNotValid

Response:

401 (Unauthorized)
ResponseHeaders:
Access-Control-Allow-Origin: *
X-Diadoc-ErrorCode: Http.Auth.Auth.CertNotValid
Content-Length: 87
Content-Type: text/plain; charset=utf-8
Date: Fri, 18 Aug 2017 07:22:49 GMT
WWW-Authenticate: Basic realm=»diadoc», DiadocAuth
Content: [87]
Certificate with thumbprint *** is not authorized.

Попробовал передать через свой сервис, а дальше по Вашей Dll (SDK для C#) Как авторизоваться в системе. SDK.
Метод «Authenticate» передаю туда полученный на клиенте через плагин КриптоПРО и декомпилированный в моём апи «Export в base64» из обсуждения #218. Выдаётся ошибка 401.

Для проверки: Пробовал просто получить список сертификатов всё срабатывает, но этот вариант не подходит для использования на сайте в интернете.

System.Security.Cryptography.X509Certificates.X509Store store = new System.Security.Cryptography.X509Certificates.X509Store(System.Security.Cryptography.X509Certificates.StoreName.My, System.Security.Cryptography.X509Certificates.StoreLocation.CurrentUser);
store.Open(System.Security.Cryptography.X509Certificates.OpenFlags.ReadOnly | System.Security.Cryptography.X509Certificates.OpenFlags.OpenExistingOnly);

System.Security.Cryptography.X509Certificates.X509Certificate2Collection collection = store.Certificates.Find(System.Security.Cryptography.X509Certificates.X509FindType.FindByTimeValid, DateTime.Now, false);
collection = collection.Find(System.Security.Cryptography.X509Certificates.X509FindType.FindByIssuerName, "skbkontur.ru", false);
System.Security.Cryptography.X509Certificates.X509Certificate2Collection scollection = null;

while (true)
{
    scollection = System.Security.Cryptography.X509Certificates.X509Certificate2UI.SelectFromCollection(collection, "Установленные на ПК сертификаты ЗАО ПФ СКБ Контур", "Сделайте выбор сертификата для подписания документов в системе диадок", System.Security.Cryptography.X509Certificates.X509SelectionFlag.MultiSelection);
    if (scollection.Count == 0)
    {
        throw new Exception("Внимание!!!: Сертификат не выбран!");
    }
    if (scollection.Count == 1)
    {
        Console.WriteLine("Выбран сертификат: {0}", scollection[0].FriendlyName);
        break;
    }
    if (scollection.Count > 1)
    {
        Console.WriteLine("Внимание!!!: Выбрано более одного сертификата!nСделайте уникальный выбор из доступных сертификатов для аутентификации в системе диадок.");
        continue;
    }
    break;
}
System.Security.Cryptography.X509Certificates.X509Certificate2 x509 = scollection[0];
var authTokenCert2 = _diadocApi.Authenticate(x509.RawData); // response status: ok!
var authTokenCert1 = _diadocApi.Authenticate(x509.Thumbprint); // response status: ok!

401 Несанкционированная ошибка – это ошибка состояния HTTPS, с которой можно столкнуться в любом браузере, например Edge, Firefox, Google Chrome и т. д. В основном, эта ошибка отображается при возникновении проблемы с загрузкой веб-страницы.

Ежедневно мы сталкиваемся с несколькими веб-сайтами. Мы подписываемся на многие онлайн-сервисы, новостные блоги и многие другие специальные предложения, просто войдя на их страницу, связавшись с нашими учетными записями в социальных сетях, такими как Facebook или Google. Кроме того, связывание учетных записей пользователей от различных поставщиков идентификационных данных существенно облегчает процесс аутентификации для пользователя, а также помогает сайтам распознавать идентификационные данные пользователей при предоставлении доступа к веб-сайту. Хотя нам трудно помнить сайты и службы, которые мы подписали в Интернете, наши системы отслеживают все эти входы в систему. Это в первую очередь обеспечивает беспроблемный серфинг с легким доступом к веб-сайтам.

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

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

Содержание

  1. Исправить 401 несанкционированную ошибку
  2. Проверить неверный URL
  3. Неверные логин или пароль
  4. Найдите опцию безопасного доступа на главной странице сайта.
  5. Ложный логин от хост-сервера

Исправить 401 несанкционированную ошибку

Проверить неверный URL

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

Неверные логин или пароль

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

Найдите опцию безопасного доступа на главной странице сайта.

Если у вас есть действительное имя URL и вы все еще видите ошибку 401, вполне возможно, что вы не вошли на сайт. В этом случае перейдите на главную страницу веб-сайта и найдите вариант с надписью «Безопасный доступ». Дайте свои учетные данные на странице входа и попробуйте загрузить страницу. Если у вас нет учетных данных, вы можете создать учетную запись. Это делается просто следуя инструкциям, приведенным на сайте.

Ложный логин от хост-сервера

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

Надеюсь, это поможет!

На чтение 4 мин. Просмотров 428 Опубликовано 18.09.2019

Содержание

  1. Методы исправления несанкционированной ошибки 401
  2. Как исправить несанкционированную ошибку 401
  3. Другие способы, которыми вы могли видеть ошибки 401
  4. Ошибки типа 401 несанкционированного

Методы исправления несанкционированной ошибки 401

Неавторизованная ошибка 401 – это код состояния HTTP, который означает, что страница, к которой вы пытались получить доступ, не может быть загружена, пока вы не войдете в систему с действительным идентификатором пользователя и паролем.

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

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

  401 не авторизован  
  Требуется авторизация  
  Ошибка HTTP 401 - неавторизовано  

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

Как исправить несанкционированную ошибку 401

  1. Проверьте на наличие ошибок в URL. Возможно, произошла ошибка 401 Unauthorized, потому что URL-адрес был введен неправильно, или выбранная ссылка указывает на неправильный URL-адрес, предназначенный только для авторизованных пользователей.

  2. Если вы уверены, что URL верен, посетите главную страницу веб-сайта и найдите ссылку с надписью Логин или Безопасный доступ . Введите здесь свои учетные данные, а затем повторите попытку.

    Если у вас нет учетных данных или вы забыли свои, следуйте инструкциям на веб-сайте для настройки учетной записи или изменения пароля.

    Вам обычно трудно вспомнить свои пароли? Храните их в диспетчере паролей, чтобы вы могли запомнить только один пароль.

  3. Перезагрузите страницу. Как бы просто это не показалось, закрытия страницы и ее повторного открытия может быть достаточно для исправления ошибки 401, но только если она вызвана ошибочно загруженной страницей.

  4. Удалите кеш вашего браузера. Возможно, в вашем браузере хранится неверная информация для входа в систему, что нарушает процесс входа и выдает ошибку 401. Очистка кеша устранит все проблемы в этих файлах и даст странице возможность загружать свежие файлы прямо с сервера.

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

Как связаться с вашим любимым сайтом, когда он не работает

С веб-мастером некоторых веб-сайтов можно связаться по электронной почте по адресу: веб-мастер @ website.com , заменив website.com фактическим названием сайта. В противном случае, найдите страницу контактов для конкретных контактных инструкций.

Другие способы, которыми вы могли видеть ошибки 401

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

Коды ошибок Microsoft IIS 401

Ошибка Объяснение
401,1 Ошибка входа в систему.
401,2 Ошибка входа в систему из-за конфигурации сервера.
401,3 Не авторизован из-за ACL на ресурсе.
401,4 Авторизация не пройдена фильтром.
401,5 Авторизация не удалась приложением ISAPI/CGI.
401,501 Доступ запрещен: слишком много запросов с одного и того же клиентского IP; Динамическое ограничение IP-адресов Достигнуто ограничение по числу одновременных запросов.
401,502 Запрещено: слишком много запросов с одного и того же клиентского IP; Динамическое ограничение IP-адресов Достигнут максимальный предел скорости запросов.
401,503 Доступ запрещен: IP-адрес включен в список Запретить ограничение IP-адресов
401,504 Доступ запрещен: имя хоста включено в список Запретить ограничение IP-адресов

Подробнее о кодах, специфичных для IIS, можно узнать на странице «Код состояния HTTP в Microsoft IIS 7 и более поздних версий».

Ошибки типа 401 несанкционированного

Следующие сообщения также являются ошибками на стороне клиента и относятся к 401 неавторизованной ошибке: 400 неверный запрос, 403 запрещенный, 404 не найден и 408 тайм-аут запроса.

Также существует ряд кодов состояния HTTP на стороне сервера, например, часто встречающаяся 500 внутренняя ошибка сервера. Вы можете найти много других в нашем списке ошибок кода состояния HTTP.

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

Ошибка 401 может появиться в любом браузере. В большинстве случаев ее легко решить.

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

Итак, приступим!

Содержание

  1. Код ошибки 401 – что это?
  2. Что вызывает ошибку 401
  3. Как исправить ошибку 401 (5 методов)

Код ошибки 401 – что это?

Коды состояния HTTP 400 возникают в случае проблем с выполнением запросов. В частности, ошибка 401 появляется, когда браузер отказывает вам в доступе к странице, которую вы хотите посетить.

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

К примеру, в Chrome и Edge вы, скорее всего, увидите иконку бумаги с простым сообщением о том, что запрашиваемая страница не отвечает. Вы увидите фразу «HTTP Error 401». Вам будет предложено связаться с владельцем сайта, если ошибка не пропадет:

В иных случаях и в других браузерах вы можете получить менее дружелюбное предупреждение. К примеру, может выводиться пустая страница с сообщением «401 Authorization Required»:

Другие вариации текста:

  • HTTP 401 Error – Unauthorized
  • 401 Unauthorized
  • Access Denied

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

Эта ошибка похожа на HTTP 403 Forbidden Error, когда доступ к сайту для пользователя запрещен. Однако, в отличие от ошибки 403, сообщение об ошибке 401 указывает, что процесс аутентификации завершился неудачно.

Код ошибки передается через заголовок WWW-Authenticate, который отвечает за определение метода аутентификации, используемого для предоставления доступа к веб-странице или ресурсу.

Что вызывает ошибку 401

Если вы столкнулись с кодом ошибки в кодах 400, вы должны знать, что проблема произошла на стороне клиента (либо на стороне браузера). Случается, что виновником проблемы является браузер, но так бывает не всегда. Об этом мы еще расскажем позже.

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

Устаревшие Cookie и кэш браузера

Одной из наиболее распространенных причин возникновения ошибки 401 является то, что кэш и файлы cookie вашего браузера устарели, что не позволяет выполнить авторизацию. Если ваш браузер использует недействительные данные для авторизации (либо вообще их не использует их), сервер отклонит запрос.

Несовместимые плагины

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

Неверный URL или устаревшая ссылка

Бывает, что источником проблемы является незначительная оплошность. К примеру, был неверно введен URL, ссылка была устаревшей и т.д.

Как исправить ошибку 401 (5 методов)

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

Давайте рассмотрим 5 методов, которые вы можете использовать.

  1. Проверьте ваш URL.

Начнем с самого простого потенциального решения: убедитесь, что вы использовали верный URL. Это может выглядеть банально, но 401 ошибки нередко появляются, если URL-адрес был введен неправильно.

Еще один вариант: ссылка, которую вы использовали для перехода на запрашиваемую страницу, указывает на неправильный URL. К примеру, ссылка устарела, ведет на страницу, которой больше нет (и редиректов не задано).

Стоит тщательно перепроверить URL-адрес, который вы использовали. Если вы набирали адрес самостоятельно, убедитесь, что все написано безошибочно. Если вы переходили по ссылке, убедитесь в том, что она ведет на страницу, к которой вы хотите получить доступ (либо попробуйте перейти на эту страницу непосредственно через сайт).

  1. Почистите кэш браузера.

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

Как мы уже говорили выше, одной из распространенных причин появления ошибки 401 являются устаревшие или неправильные данные кэша или cookies. Потому, если URL введен верно, следующий шаг – чистка кэша браузера.

В итоге вы удалите любую недействительную информацию, которая хранится локально в вашем браузере и может приводить к прерываниям процесса аутентификации.  Аналогично, файлы cookie вашего браузера могут содержать аутентификационные данные, которые нужно обновить.

Если вы пользуетесь Chrome, вам нужно щелкнуть по иконке с меню в правом верхнем углу браузера и выбрать пункт Settings. В разделе «Privacy and security» нажмите «Clear browsing data:»

Далее вводим URL требуемого сайта и очищаем для него данные.

В других браузерах процесс очистки кэша и cookie может отличаться. К примеру, в Firefox нужно щелкать по иконке с библиотекой и выбирать History > Clear Recent History:

Информацию по остальным браузерам вы можете найти в поисковиках.

  1. Очистка DNS.

Еще один метод, который вы можете попробовать для устранения ошибки 401 – это очистка DNS. Эта причина встречается относительно редко, но стоит попробовать и такой подход, особенно если первые два ничего не дали.

Чтобы очистить DNS, перейдите в Windows к меню «Пуск» и там уже введите в строку поиска cmd. Нажмите Enter. Откроется командная строка. Далее вставьте команду ipconfig/flushdns, после чего снова нажмите Enter.

Если вы пользуетесь Mac, вы можете открыть командную строку следующим образом: Finder > Applications > Utilities > Terminal.

Введите команду sudo killall -HUP mDNSResponder и нажмите Enter. Затем вы можете обновить страницу, чтобы посмотреть, пропала ли ошибка 401 или нет.

  1. Деактивируйте ваши плагины

Проблема может возникать и по вине плагинов.

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

Вы можете деактивировать все плагины разом, перейдя в раздел Plugins > Installed Plugins в консоли WordPress. Выберите все плагины и в меню Bulk Actions задайте Deactivate, после чего щелкните по кнопке Apply:

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

Далее вы уже можете либо удалить плагин, либо написать его разработчикам, чтобы они предоставили рабочее решение.

  1. Проверьте заголовок WWW-Authenticate

Если проблема все еще остается, то в таком случае она может быть связана с ошибками на сервере. А значит, исправить ее будет чуть сложнее.

Как мы уже писали ранее, ответ 401 передается через заголовок WWW-Authenticate, который отображается как “WWW-Authenticate: <type> realm=<realm>”. Он включает в себя строки данных, указывающие на то, какой тип аутентификации требуется для предоставления доступа.

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

Перейдите на страницу с ошибкой 401 и откройте консоль разработчика в Chrome. Вы можете щелкнуть правой кнопкой мыши на странице и выбрать Inspect (Ctrl+Shift+J).

Далее перейдите на вкладку Network и перезагрузите страницу. Это позволит сгенерировать список ресурсов. Выберите заголовок Status, чтобы отсортировать таблицу, и найдите код 401:

Выберите данную запись, после чего перейдите на вкладку Headers. В Response Headers найдите заголовок WWW-Authenticate:

Информация, представленная в заголовке ответа, в частности, в схеме аутентификации, даст вам больше сведений о том, что произошло, и укажет на решение. Это позволит вам понять, какой тип аутентификации требуется серверу.

К примеру, в приведенном выше примере мы видим, что схема аутентификации задана как «Basic». Это означает, что запрос аутентификации требует только ID и password. Для получения более подробной информации и инструкций мы рекомендуем обратиться к HTTP Authentication Scheme Registry.

Источник: kinsta.com

Понравилась статья? Поделить с друзьями:
  • Уведомление покупателю об ошибочно выставленном счете фактуре
  • Увулярный звук р как исправить
  • Уаз ошибка 2187 патриот на газе
  • Уволенному сотруднику ошибочно перечислили зарплату
  • Уаз ошибка 062