Удаленный сервер вернул ошибку: (403) запрещено

Я написал приложение, которое отлично работает в течение нескольких месяцев, в последние несколько дней я получаю ошибку ниже только в установленной версии.

Если я запускаю исходный код в vs все работает нормально. И еще.exe в папках bin работает нормально. Это только установленная версия, которая генерирует ошибку, если я перекомпилирую и переустановить я получаю ту же ошибку.

Я немного озадачен тем, что вызывает это, и надеялся на несколько указателей. Кажется, это WebRequest ответ через IE не возвращается, но я в тупике, почему он отлично работает в VS без каких-либо ошибок. Существуют ли какие-либо новые меры безопасности/политики IE, которые могут вызвать это?

вещи, которые я пробовал до сих пор, включают:

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

Исключение:

Exception: System.Windows.Markup.XamlParseException: The invocation of the constructor on type 'XApp.MainWindow' that matches the specified binding constraints threw an exception. ---> System.Net.WebException: The remote server returned an error: (403) Forbidden.
   at System.Net.HttpWebRequest.GetResponse()
   at XApp.HtmlRequest.getHtml(Uri uri) in J:PathMainWindow.xaml.cs:line 3759
   at XApp.MainWindow.GetLinks() in J:PathMainWindow.xaml.cs:line 2454
   at XApp.MainWindow..ctor() in J:PathMainWindow.xaml.cs:line 124
   --- End of inner exception stack trace ---
   at System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader, IXamlObjectWriterFactory writerFactory, Boolean skipJournaledProperties, Object rootObject, XamlObjectWriterSettings settings, Uri baseUri)
   at System.Windows.Markup.WpfXamlLoader.LoadBaml(XamlReader xamlReader, Boolean skipJournaledProperties, Object rootObject, XamlAccessLevel accessLevel, Uri baseUri)
   at System.Windows.Markup.XamlReader.LoadBaml(Stream stream, ParserContext parserContext, Object parent, Boolean closeStream)
   at System.Windows.Application.LoadBamlStreamWithSyncInfo(Stream stream, ParserContext pc)
   at System.Windows.Application.LoadComponent(Uri resourceLocator, Boolean bSkipJournaledProperties)
   at System.Windows.Application.DoStartup()
   at System.Windows.Application.<.ctor>b__1(Object unused)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)
Exception: System.Net.WebException: The remote server returned an error: (403) Forbidden.
   at System.Net.HttpWebRequest.GetResponse()
   at XApp.HtmlRequest.getHtml(Uri uri) in J:PathMainWindow.xaml.cs:line 3759
   at XApp.MainWindow.GetLinks() in J:PathMainWindow.xaml.cs:line 2454
   at XApp.MainWindow..ctor() in J:PathMainWindow.xaml.cs:line 124

EDIT:

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

код, который вызывает проблему, это

private void GetLinks()
{
    //Navigate to front page to Set cookies
    HtmlRequest htmlReq = new HtmlRequest();

    OLinks = new Dictionary<string, List<string>>();

    string Url = "http://www.somesite.com/somepage";
    CookieContainer cookieJar = new CookieContainer();
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
    request.CookieContainer = cookieJar;

    request.Accept = @"text/html, application/xhtml+xml, */*";
    request.Referer = @"http://www.somesite.com/";
    request.Headers.Add("Accept-Language", "en-GB");
    request.UserAgent = @"Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)";
    request.Host = @"www.somesite.com";

    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    String htmlString;
    using (var reader = new StreamReader(response.GetResponseStream()))
    {
        htmlString = reader.ReadToEnd();
    }

    //More Code


 }

8 ответов


добавить следующую строку:

request.UseDefaultCredentials = true;

Это позволит приложению использовать учетные данные пользователя для доступа к сайту. Если он возвращает 403, очевидно, он ожидает аутентификации.

также возможно, что вы (сейчас?) имейте аутентифицирующий прокси-сервер между вами и удаленным сайтом. В этом случае, попробуйте:

request.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;

надеюсь, что это помогает.


похоже, проблема основана на стороне сервера.

Im мой случай я работал с сервером paypal, и ни один из предложенных ответов не помог, но http://forums.iis.net/t/1217360.aspx?HTTP+403 + запрещено + ошибка

я столкнулся с этой проблемой и только что получил ответ от Paypal technical. Добавьте это исправит проблему 403. HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.UserAgent = "[any words that is more than 5 characters]";


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

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


    private class GoogleShortenedURLResponse
    {
        public string id { get; set; }
        public string kind { get; set; }
        public string longUrl { get; set; }
    }

    private class GoogleShortenedURLRequest
    {
        public string longUrl { get; set; }
    }

    public ActionResult Index1()
    {
        return View();
    }

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult ShortenURL(string longurl)
    {
        string googReturnedJson = string.Empty;
        JavaScriptSerializer javascriptSerializer = new JavaScriptSerializer();

        GoogleShortenedURLRequest googSentJson = new GoogleShortenedURLRequest();
        googSentJson.longUrl = longurl;
        string jsonData = javascriptSerializer.Serialize(googSentJson);

        byte[] bytebuffer = Encoding.UTF8.GetBytes(jsonData);

        WebRequest webreq = WebRequest.Create("https://www.googleapis.com/urlshortener/v1/url");
        webreq.Method = WebRequestMethods.Http.Post;
        webreq.ContentLength = bytebuffer.Length;
        webreq.ContentType = "application/json";

        using (Stream stream = webreq.GetRequestStream())
        {
            stream.Write(bytebuffer, 0, bytebuffer.Length);
            stream.Close();
        }

        using (HttpWebResponse webresp = (HttpWebResponse)webreq.GetResponse())
        {
            using (Stream dataStream = webresp.GetResponseStream())
            {
                using (StreamReader reader = new StreamReader(dataStream))
                {
                    googReturnedJson = reader.ReadToEnd();
                }
            }
        }

        //GoogleShortenedURLResponse googUrl = javascriptSerializer.Deserialize<googleshortenedurlresponse>(googReturnedJson);

        //ViewBag.ShortenedUrl = googUrl.id;
        return View();
    }

Это, вероятно, не поможет слишком многим людям, но это был мой случай: я использовал Jira REST Api и использовал свои личные учетные данные (те, которые я использую для входа в Jira). Я обновил свой пароль Jira, но забыл обновить его в своем коде. Я получил ошибку 403, я попытался обновить свой пароль в коде, но все равно получил ошибку.

решение: я попытался войти в Jira (со своей страницы входа), и мне пришлось ввести текст, чтобы доказать, что я не бот. После этого я попробовал еще раз код и это сработало. Вынос: возможно, сервер заблокировал вас.


в моем случае я вспомнил, что некоторое время назад для этого адреса было создано отверстие в брандмауэре, поэтому мне пришлось установить useDefaultWebProxy="false" в привязке в файле конфигурации, как если бы по умолчанию использовался прокси, если useDefaultWebProxy не указан.


установка:

request.Referer = @"http://www.somesite.com/";

и добавить cookies не работал для меня


мы должны получить доступ к веб-сайту, используя имя, указанное в сертификате.enter image description here