Удаленный сервер вернул неверный запрос с ошибкой (400), используя webrequest

#asp.net #httpwebrequest

#asp.net #httpwebrequest

Вопрос:

Когда я выполняю HttpWebRequest.GetResponse по URL, GetResponse возвращает «Удаленный сервер вернул ошибку: (400) неверный запрос». вместо ответа.

Странно то, что когда я запускаю этот URL в браузере, я получаю правильный ответ.

разве webrequest не должен возвращать те же значения, что и браузер?

следующий код возвращает неверный запрос

  // Create a request for the URL. 
            WebRequest request = WebRequest.Create(
              "http://someUrl/api/v5/basicAuth");


            // Get the response.
            WebResponse response = request.GetResponse();
            // Display the status.
            Console.WriteLine(((HttpWebResponse)response).StatusDescription);
            // Get the stream containing content returned by the server.
            Stream dataStream = response.GetResponseStream();
            // Open the stream using a StreamReader for easy access.
            StreamReader reader = new StreamReader(dataStream);
            // Read the content.
            string responseFromServer = reader.ReadToEnd();
            // Display the content.
            Console.WriteLine(responseFromServer);
            // Clean up the streams and the response.
            reader.Close();
            response.Close();
  

также пытался использовать WebClient с теми же результатами.

есть идеи, как получить правильный ответ, такой же, как в браузере?

Ответ №1:

В заголовке говорится, что вы получаете 400 ошибочных запросов, но в вашем вопросе вы говорите, что 404 не найдено. Это очень разные запросы. Для 404 я бы устранял неполадки с самим URL-адресом и тем, как маршрутизируется запрос, DNS и т.д. Если это 400, то я бы использовал что-то вроде Fiddler, чтобы зафиксировать, как выглядит мой запрос при использовании браузера, затем посмотреть, как выглядит запрос при поступлении из программы, и посмотреть, что отличается / отсутствует. Возможно, необходимы некоторые HTTP-заголовки, такие как тип содержимого или обработка файлов cookie и т.д. И т.п. Но что-то вроде Fiddler могло бы, по крайней мере, помочь вам начать.

Комментарии:

1. да, вы исправили ошибку 400 при попытке простого WebRequest, как показано выше. и я получаю 404 при попытке отправить некоторые данные по этому URL.

2. Итак, как вы «должны» взаимодействовать с URL? Это веб-служба, которая отвечает только на GET, POST, PUT и т.д.? Если вы можете успешно добраться до него с помощью браузера и просмотреть данные, то я предполагаю, что GET работает. Поэтому я бы попробовал Fiddler, чтобы увидеть, в чем различия между запросом вашего браузера и HttpWebRequest из вашего кода.

3. да, это веб-служба, которая отвечает на GET, POST. Я проверю Fiddler, чтобы увидеть различия. Спасибо

4. Вы также должны иметь возможность использовать «Composer» Fiddler для создания POST-запросов для дальнейшего устранения неполадок. В Firefox также есть дополнение под названием Posterizer, которое делает нечто подобное.

5. Удалось ли вам увидеть различия с Fiddler? Вы разобрались с проблемой?