Вопросы с тегами [webresponse]

0

голосов
0

ответ
4

Просмотры

Как обрабатывать Unicode Ответ WebResponse (RestSharp)

Таким образом, я получаю ответ от сервера, и он использует символы валюты выразить валюту. Эти символы приведены как это в WebResponse: «\ u00a3». Я хотел бы, чтобы закодировать их обратно, так что я получить фактический символ. Во-первых, я думал, что это будет мой консольного выход, так что я изменил кодировку консоли, но это не помогло. Так как я не так хорошо знаком с кодировкой я думал, что я хотел бы получить некоторую помощь здесь. Ответ: "Символ": "\ u00a3" строка ответа = Client.Execute (REQ) .content; То, что я пробовал: Console.OutputEncoding = System.Text.Encoding.UTF8; Вместо «\ u00a3» он должен дать мне «£»
FuseFire
1

голосов
3

ответ
297

Просмотры

WebResponse с 3-го участника, используя их данное API, C #

Я новичок в C #. Я хочу отправить сообщение с настольного приложения, используя C #, для этого я купил API от компании мобильной связи (Telenor). По их документам сначала я должен получить идентификатор аутентификации, отправив запрос на этот URL (https://telenorcsms.com.pk:27677/corporate_sms2/api/auth.jsp?msisdn=xxxx&password=xxx), и это дает мне ответ в формате XML, как это: Auth_request Session ID OK Теперь мне нужно идентификатор сеанса, который находится в узле, чтобы использовать в дальнейшем для отправки сообщения, как (https://telenorcsms.com.pk:27677/corporate_sms2/api/sendsms.jsp? session_id = XXXX & к = 923xxxxxxxxx, 923xxxxxxxxx, 923xxxxxxxxx & текст = XXXX & маска = XXXX). Я пробовал много методов, чтобы вывести идентификатор сеанса и использовать его, но не получил ни малейшего представления, как это сделать. его мой код: WebClient клиент = новый WebClient (); client.Headers.Add ( "пользователь-агент", "
Luqman Tariq
1

голосов
3

ответ
8.7k

Просмотры

You must write ContentLength bytes to the request stream before calling [Begin]GetResponse

Ошибка: Вы должны написать ContentLength байт в поток запроса перед вызовом [Begin] GetResponse. Может кто-нибудь посоветовать, почему я получаю вышеуказанную ошибку при запуске следующего кода Dim XML As New System.Xml.XmlDocument () Dim корень Как XMLElement корень = xml.CreateElement ( «корень») xml.AppendChild (корень) Dim пользователя As XmlElement имя пользователя = xml.CreateElement ( "UserName") username.InnerText = "ххххх" root.AppendChild (имя пользователя) Dim пароль Как XMLElement пароль = xml.CreateElement ( "пароль") password.InnerText = "хххх" root.AppendChild (пароль) дим shipmenttype Как XmlElement shipmenttype = xml.CreateElement ( "ShipmentType") shipmenttype.InnerText = "доставки"
user2516387
1

голосов
1

ответ
786

Просмотры

WebResponse Тайм-аут

Я пишу программу, которая считывает данные из ряда веб-страниц; это работает на первую страницу, однако затем зависает во время ожидания ответа от следующей страницы, пока не выйдет время. Могу ли я начать чтение страницы 1, 2, 140 и т.д., он всегда будет успешно прочитал первую страницу, но никто после этого. Я думаю, что это может быть связано с переменной «cookieHeader», которая необходима, чтобы получить доступ к страницам, как веб-сайт требует от пользователя для входа первым. Однако, когда я проверяла этот элемент, его время истечения срока устанавливаются как на следующий день, так что я не вижу, как это может быть истек еще. Я новичок в этом, так что я надеюсь кто-то, кто сталкивался с этой проблемой раньше или кто лучше понимает печенье может помочь мне. Я был бы признателен за любой вклад! Ниже приведен фрагмент кода, где ошибка тайм-аута быть пойманным примерки поймать обертке. // цикл по каждой странице для (INT I = 1; я
user1959309
1

голосов
2

ответ
3.8k

Просмотры

Как разобрать JSON данные в System.Net.Webrequest réponse

Я пытаюсь вызвать API, который возвращает данные в формате JSON, которые мне нужно разобрать. Как сделать это в System.Net.Webrequest .. Ниже мой код ServicePointManager.ServerCertificateValidationCallback = новые System.Net.Security.RemoteCertificateValidationCallback (AcceptAllCertifications); просить = WebRequest.Create ( "https: // IPAaddress / API / администратор / конфигурация / v1 / конференции / 1 /"); request.Credentials = новый NetworkCredential ( "имя пользователя", "пароль"); // Создание данных POST и преобразовать его в массив байтов. request.Method = "GET"; // Устанавливает свойство ContentType в WebRequest. request.ContentType = "приложения / JSON; кодировка = UTF-8"; ответ WebResponse = request.GetResponse (); // Отображение состояния. ЕЫпе (((HttpWebResponse) ответ) .StatusDescription); // Получить поток, содержащий контент, возвращаемый сервером. DATASTREAM = response.GetResponseStream (); // Открывает поток с помощью StreamReader для легкого доступа. StreamReader читатель = новый StreamReader (Datastream); // Читает содержание. Строка responseFromServer = reader.ReadToEnd (); // Отображение содержимого. ЕЫпе (responseFromServer); // Очистка потоков. reader.Close (); dataStream.Close (); response.Close (); DATASTREAM = response.GetResponseStream (); // Открывает поток с помощью StreamReader для легкого доступа. StreamReader читатель = новый StreamReader (Datastream); // Читает содержание. Строка responseFromServer = reader.ReadToEnd (); // Отображение содержимого. ЕЫпе (responseFromServer); // Очистка потоков. reader.Close (); dataStream.Close (); response.Close (); DATASTREAM = response.GetResponseStream (); // Открывает поток с помощью StreamReader для легкого доступа. StreamReader читатель = новый StreamReader (Datastream); // Читает содержание. Строка responseFromServer = reader.ReadToEnd (); // Отображение содержимого. ЕЫпе (responseFromServer); // Очистка потоков. reader.Close (); dataStream.Close (); response.Close (); ЕЫпе (responseFromServer); // Очистка потоков. reader.Close (); dataStream.Close (); response.Close (); ЕЫпе (responseFromServer); // Очистка потоков. reader.Close (); dataStream.Close (); response.Close ();
RackM
1

голосов
1

ответ
478

Просмотры

WebRequest.GetResponse это ничего не возвращает

Я застрял с этим, я называю простой URL сервера отчетов, который возвращает PDF отчета, но как ни странно метод WebRequest.GetResponse не возвращает ничего, когда я говорю об этом, я имею в виду код просто прекратить выполнение в этой точке, не исключение , нет ошибки, нет кода состояния, нет просмотра событий не войти на сервер, ничего !! И поэтому я не смог отладить Это мой код HttpWebRequest REQ = (HttpWebRequest) WebRequest.Create (URL); req.PreAuthenticate = TRUE; req.UseDefaultCredentials = TRUE; req.Credentials = CredentialCache.DefaultNetworkCredentials; req.ImpersonationLevel = TokenImpersonationLevel.Impersonation; req.Timeout = int.MaxValue; Log.Write ( "Log раньше"); ответ переменная = req.GetResponse (); Log.Write ( "Войти через"); Он просто печатает журнал перед тем журнал, а затем ничего не печатается после этого. Этот код работает прекрасно, когда я бег через визуальные студии и перестает работать, когда она развернута в Дев и тестовых серверах! Я просто ожидая, что это по крайней мере через исключение или возврат несанкционированного или любой другой код состояния, то я буду иметь возможность отладки вопрос. Любые предложения, что я могу попробовать отладить это?
Pawan Nogariya
1

голосов
2

ответ
2.2k

Просмотры

Can't download complete image file from skydrive using REST API

I'm working on a quick wrapper for the skydrive API in C#, but running into issues with downloading a file. For the first part of the file, everything comes through fine, but then there start to be differences in the file and shortly thereafter everything becomes null. I'm fairly sure that it's just me not reading the stream correctly. This is the code I'm using to download the file: public const string ApiVersion = "v5.0"; public const string BaseUrl = "https://apis.live.net/" + ApiVersion + "/"; public SkyDriveFile DownloadFile(SkyDriveFile file) { string uri = BaseUrl + file.ID + "/content"; byte[] contents = GetResponse(uri); file.Contents = contents; return file; } public byte[] GetResponse(string url) { checkToken(); Uri requestUri = new Uri(url + "?access_token=" + HttpUtility.UrlEncode(token.AccessToken)); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requestUri); request.Method = WebRequestMethods.Http.Get; WebResponse response = request.GetResponse(); Stream responseStream = response.GetResponseStream(); byte[] contents = new byte[response.ContentLength]; responseStream.Read(contents, 0, (int)response.ContentLength); return contents; } This is the image file I'm trying to download And this is the image I am getting These two images lead me to believe that I'm not waiting for the response to finish coming through, because the content-length is the same as the size of the image I'm expecting, but I'm not sure how to make my code wait for the entire response to come through or even really if that's the approach I need to take. Here's my test code in case it's helpful [TestMethod] public void CanUploadAndDownloadFile() { var api = GetApi(); SkyDriveFolder folder = api.CreateFolder(null, "TestFolder", "Test Folder"); SkyDriveFile file = api.UploadFile(folder, TestImageFile, "TestImage.png"); file = api.DownloadFile(file); api.DeleteFolder(folder); byte[] contents = new byte[new FileInfo(TestImageFile).Length]; using (FileStream fstream = new FileStream(TestImageFile, FileMode.Open)) { fstream.Read(contents, 0, contents.Length); } using (FileStream fstream = new FileStream(TestImageFile + "2", FileMode.CreateNew)) { fstream.Write(file.Contents, 0, file.Contents.Length); } Assert.AreEqual(contents.Length, file.Contents.Length); bool sameData = true; for (int i = 0; i < contents.Length && sameData; i++) { sameData = contents[i] == file.Contents[i]; } Assert.IsTrue(sameData); } It fails at Assert.IsTrue(sameData);
nick
1

голосов
1

ответ
3.7k

Просмотры

URL работает в браузере, но не получить ответ от веб-клиента или веб-запрос

У меня есть вопрос относительно ответа от сервера. (Возвращает 403 запрещено). Когда я проверяю тот же URL в браузере можно увидеть на этой странице. Я написал следующий код для получения ответа. Тот же код я выполнить в моем локальном компьютере, он прекрасно работает. HttpWebRequest запросить = WebRequest.Create (RequestUrl) в качестве HttpWebRequest; request.Method = "POST"; request.CookieContainer = новый CookieContainer (); request.Timeout = 600000; request.Accept = "* / *"; request.UserAgent = "Mozilla / 5.0 (Windows NT 6.1; с.в.: 18.0) Gecko / 20100101 Firefox / 18.0"; WebResponse ответ; попытаться {ответ = request.GetResponse (); Строка StatusDescription = ((HttpWebResponse) ответ) .StatusDescription; если (StatusDescription.ToLower () == "ОК") {Поток DATASTREAM = response.GetResponseStream (); // XmlDocument XmlResponse = новый XmlDocument (); //XmlResponse.Load(dataStream); //XmlResponse.Save(Server.MapPath("~/XMLResponse.xml ")); StreamReader читатель = новый StreamReader (Datastream); Строка responseFromServer = reader.ReadToEnd (); responseFromServer = responseFromServer.Replace (»», ""); responseFromServer = responseFromServer.Replace ( "&", "&"); reader.Close (); dataStream.Dispose (); response.Close (); responseFromServer = GetStringsBetweenTags (responseFromServer, "", ""); вернуться responseFromServer; } Еще {// Чтобы сделать: добавить код уведомит об ошибке с помощью электронной почты}} поймать (Exception ех) {WebClient WebClient = новый WebClient (); используя (StreamReader читатель = новый StreamReader (webclient.OpenRead (RequestUrl))) {строка responseFromServer = reader.ReadToEnd (); responseFromServer = responseFromServer.Replace (»», ""); responseFromServer = responseFromServer.Replace ( "&", "&"); reader.Close (); webclient.Dispose (); responseFromServer = GetStringsBetweenTags (responseFromServer, "", ""); вернуться responseFromServer; }}
Nitin Vijay
1

голосов
2

ответ
3.7k

Просмотры

Почему нам нужно установить Тип содержимого запроса заголовка

Я хочу знать, что есть тип контента, поэтому нам нужно установить тип содержимого запроса заголовка и сколько типов содержимого заголовка может быть установлен? просьба представить документацию, если это возможно.
Usman Hafeez
5

голосов
1

ответ
7.7k

Просмотры

Http Get Request GetResponse Ошибка

Im пытается отправить запрос GET и получить содержимое веб-страницы. У меня есть эти символы. строка URL = "www.google.com"; HttpWebRequest запрос = (HttpWebRequest) WebRequest.Create (URL); HttpWebResponse ответ = (HttpWebResponse) response.GetResponse (); Я нашел эти коды от многих сайта, и это правильно, но «GetResponse» дает ошибку. Его объяснение ниже. Является ли это проблемой Visual Studio 2012? Она не может найти метод GetResponse и просто найти способ GetResponseStream, когда я нажимаю G. Я пытался сделать это с помощью класса WebClient, но WebClient не может быть найдена также. У эти проблемы возникают из-за Visual Studio 2012? или какая-либо причина? Ошибка 1 «System.Net.HttpWebResponse» не содержит определение для «GetResponse» и не метода расширения «GetResponse» принимающего первый аргумент типа «системы.
abidinberkay
21

голосов
6

ответ
8.8k

Просмотры

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

Как правило, один пишет код что-то вроде этого, чтобы загрузить некоторые данные, используя WebRequest. используя (WebResponse соответственно = request.GetResponse ()) // WebRequest запрос ... используя (ул поток = resp.GetResponseStream ()); // сделать что-то с потоком ул Теперь, если WebException брошено, то WebException имеет ссылку на объект WebResponse, который может или не может иметь Dispose называется (в зависимости от того, где исключение произошло, или, как реализован класс ответа) - Я не знаю. Мой вопрос заключается в том, как один должен иметь дело с этим. Является ли один должен быть кодирование очень защищаясь, и избавиться от ответа на объект WebException (это было бы немного странно, так как WebException не IDisposable). Или один должен игнорировать это, потенциально доступ к объекту или расположенный никогда не утилизация IDisposable в объекте? Пример, приведенный в документации MSDN для WebException.Response совершенно недостаточно.
Marcus
2

голосов
2

ответ
1.7k

Просмотры

C #: Публикуйте данные входа в систему для формирования и реагирования на процесс веб-сайта

Я пытаюсь написать C # программы, чтобы продлить срок моих книг в библиотеке моего университета. То, что я хочу сделать, это следующее: 1.) Вход в библиотеку сайта с помощью WebRequest и POST метода, с именем пользователя и паролем, введенными в C # программе 2.) Получить URL на «Посмотреть заимствованные книги» сайт, содержащий зашифрованный пароль & обычный текст имя пользователя в качестве параметров GET 3.) Скачать содержание под названием страницы для отображения пользователю в программе # C 4.) Если пользователь нажимает соответствующую кнопку в программе, отправьте форму пролонгированным на сайт, чтобы продлить все средства массовой информации сразу. Сейчас я застрял между 1 и 2, я, кажется, чтобы иметь возможность подключиться к веб-сайт и ввести данные пользователя, но WebResponse я снова страница Логин (который не так, если вы войти в систему вручную на сайте ). Это метод, который я написал для подключения к веб-сайт: // Вход функции, регистрирует пользователя в, использует передается номер пользователя и пароль публичный статический Boolean Userlogin (String УНР, String проход) {// Login // Cookie необходимы для поддержания PHP сессия CookieContainer cContainer = новый CookieContainer (); ЕЫпе (УНР + "" + пас); Строка postUrl = "https://universitylibrary.com/loan/DB=4/LNG=DU/USERINFO_LOGIN"; Строка formParams = String.Format ( "АКТ = {0} & HOST_NAME = {1} & host_port = {2} & HOST_SCRIPT = {3} & ВХОД = {4} & STATUS = {5} & BOR_U = {6} & BOR_PW = {7}", "UI_DATA", "", "", "", "KNOWNUSER", "HML_OK", УНР, проходят); Строка cookieHeader; WebRequest wreq = WebRequest.Create (postUrl); wreq.ContentType = "применение / х-WWW-форм-urlencoded"; wreq.Method = "POST"; байт [] байт = Encoding.ASCII.GetBytes (formParams); wreq.ContentLength = bytes.Length; используя (поток OS = wreq.GetRequestStream ()) {os.Write (байт, 0, bytes.Length); } WebResponse соответственно = wreq.GetResponse (); cookieHeader = resp.Headers [ "Set-Cookie"]; // пробная Authentication строка исходный текст; Строка GetURL = "https://universitylibrary.com:443/loan/DB=4/USERINFO"; WebRequest getReq = WebRequest.Create (GetURL); getReq.Headers.Add ( "печенье", cookieHeader); WebResponse getResp = getReq.GetResponse (); используя (StreamReader стер = новый StreamReader (getResp. GetResponseStream ())) {= sr.ReadToEnd исходный текст (); } Console.Write (исходный текст); возвращает истину; } Вы можете увидеть мою ошибку? Я получаю исходный код и Params (имя пользователя, пароль) вывод на консоли, но вывод снова страница Войти. Я бы просто посмотреть на странице PHP, но у меня нет доступа к какому-либо из данных системы внутренних, все у меня есть страница HTML. Любые предложения будут оценены! EDIT: Я переосмыслил все это, и перестроен заголовок запроса HTTP полностью зафиксированную стелькой. Та часть функции будет выглядеть так: // Логин // Cookie необходимы для поддержания PHP сессии CookieContainer cContainer = новый CookieContainer (); HttpCookie печенья = новый HttpCookie ( "печенье", "PSC_4 = 'XXXXXXX'; DB = 'п'" ); CookieCollection cookieCol = новый CookieCollection (); cookieCol.Add (cookieCol); cContainer.Add (cookieCol); ЕЫпе (УНР + "" + пас); Строка postUrl = "https://universitylibrary.com:443/loan/DB=4/USERINFO"; Строка formParams = String.Format ( "АКТ = {0} & HOST_NAME = {1} & host_port = {2} & HOST_SCRIPT = {3} & ВХОД = {4} & STATUS = {5} & BOR_U = {6} & BOR_PW = {7}", "UI_DATA", "", "", "", "KNOWNUSER", "HML_OK", УНР, проходят); Строка cookieHeader; HttpWebRequest wreq = (HttpWebRequest) WebRequest.Create (postUrl); wreq.Referer = "https://universitylibrary.com/loan/DB=4/LNG=DU/USERINFO_LOGIN"; wreq.KeepAlive = TRUE; wreq.ContentLength = 119; wreq.Host = " ]; } Задвижка (WebException ех) {Console.WriteLine (ex.Status); ЕЫпе (ex.Response); } Все это по-прежнему не работает, хотя, такой же вопрос, как и раньше. Возможно ли, что HttpWebRequest не может обрабатывать HTTPS или что-то еще не хватает для HTTPS, чтобы работать? (HTTP и HTTPS, кажется, синтаксически идентичны и порт правильно установлен в 443, реальная разница, кажется, лежит в дополнительный SSL / TLS слоя, может быть, мне нужно добавить это где-нибудь?) т обрабатывать HTTPS или что-то еще не хватает для HTTPS, чтобы работать? (HTTP и HTTPS, кажется, синтаксически идентичны и порт правильно установлен в 443, реальная разница, кажется, лежит в дополнительный SSL / TLS слоя, может быть, мне нужно добавить это где-нибудь?) т обрабатывать HTTPS или что-то еще не хватает для HTTPS, чтобы работать? (HTTP и HTTPS, кажется, синтаксически идентичны и порт правильно установлен в 443, реальная разница, кажется, лежит в дополнительный SSL / TLS слоя, может быть, мне нужно добавить это где-нибудь?)
Jannik Pi
2

голосов
2

ответ
3.1k

Просмотры

Why does sending post data with WebRequest take so long?

I am currently creating a C# application to tie into a php / MySQL online system. The application needs to send post data to scripts and get the response. When I send the following data username=test&password=test I get the following responses... Starting request at 22/04/2010 12:15:42 Finished creating request : took 00:00:00.0570057 Transmitting data at 22/04/2010 12:15:42 Transmitted the data : took 00:00:06.9316931
3

голосов
1

ответ
15.6k

Просмотры

C # WebRequest сообщение и GetResponse

Я пишу программу, которая будет представлять собой XML на веб-сайт. Код, написанный работает отлично, но иногда он просто перестает работать по какой-то причине, бросая System.Net.ProtocolViolationException. Я могу закрыть программу и повторно запустить - он начинает работать снова нормально. Вот код, который я использую: частная строка Summit (строка XML) {строка результат = string.Empty; StringBuilder SB = новый StringBuilder (); попробуйте {WebRequest запрос = WebRequest.Create (this.targetUrl); request.Timeout = 800 * 1000; RequestState requestState = новый RequestState (XML); requestState.Request = запрос; request.ContentType = "текст / XML"; // Устанавливаем свойство «метод» к «POST», чтобы получить возможность отправлять данные в Ури. requestState.Request.Method = "POST"; requestState.Request. ТипСодержимый = "текст / XML"; // Начало «» BeginGetRequestStream вызова метода асинхронного. IAsyncResult г = (IAsyncResult) request.BeginGetRequestStream (новый AsyncCallback (ReadCallBack), requestState); // Приостановка текущего потока, пока операция не будет завершена асинхронной. // Console.WriteLine ( "Основной поток ожидание ..."); allDone.WaitOne (); // Присвоить объект отклика «WebRequest» переменной «WebResponse». WebResponse отклика = NULL; попытаться {ответ = request.GetResponse (); } Задвижка (System.Net.ProtocolViolationException ех) {ответ = NULL; request.Abort (); запрос = NULL; requestState = NULL; вернуть ""; } //Console.WriteLine (» } Задвижка (WebException WebEx) {Debug.WriteLine (webex.Message); } Задвижка (System.Web.Services.Protocols.SoapException soapex) {Debug.WriteLine (soapex.Message); } Задвижка (System.Net.ProtocolViolationException ех) {Debug.WriteLine (ex.Message); } Задвижка (Исключение ех) {Debug.WriteLine (ex.Message); } Вернуть sb.ToString (); } Частных статических аннулируются ReadCallBack (IAsyncResult AsyncResult) {попробуйте {RequestState myRequestState = (RequestState) asyncResult.AsyncState; WebRequest myWebRequest2 = myRequestState.Request; // Конец запроса Asynchronus. Поток responseStream = myWebRequest2.EndGetRequestStream (AsyncResult); // Преобразование строки в массив байтов. ASCIIEncoding кодер = новый ASCIIEncoding (); байт [] ByteArray = кодер. GetBytes (myRequestState.Xml); // Запись данных в потоке. responseStream.Write (ByteArray, 0, myRequestState.Xml.Length); responseStream.Close (); } Задвижка (WebException е) {Console.WriteLine ( "\ nReadCallBack Exception поднял!"); Console.WriteLine ( "\ nMessage: {0}", e.Message); Console.WriteLine ( "\ nStatus: {0}", e.Status); } AllDone.Set (); } Ответ = request.GetResponse (), когда он терпит неудачу и дает ошибку Вы должны обеспечить тело запроса, если вы установите ContentLength> 0 или SendChunked == верно. Сделайте это по телефону [Начало] GetRequestStream до [Begin] GetResponse. Любая помощь будет принята с благодарностью. responseStream.Close (); } Задвижка (WebException е) {Console.WriteLine ( "\ nReadCallBack Exception поднял!"); Console.WriteLine ( "\ nMessage: {0}", e.Message); Console.WriteLine ( "\ nStatus: {0}", e.Status); } AllDone.Set (); } Ответ = request.GetResponse (), когда он терпит неудачу и дает ошибку Вы должны обеспечить тело запроса, если вы установите ContentLength> 0 или SendChunked == верно. Сделайте это по телефону [Начало] GetRequestStream до [Begin] GetResponse. Любая помощь будет принята с благодарностью. responseStream.Close (); } Задвижка (WebException е) {Console.WriteLine ( "\ nReadCallBack Exception поднял!"); Console.WriteLine ( "\ nMessage: {0}", e.Message); Console.WriteLine ( "\ nStatus: {0}", e.Status); } AllDone.Set (); } Ответ = request.GetResponse (), когда он терпит неудачу и дает ошибку Вы должны обеспечить тело запроса, если вы установите ContentLength> 0 или SendChunked == верно. Сделайте это по телефону [Начало] GetRequestStream до [Begin] GetResponse. Любая помощь будет принята с благодарностью. } AllDone.Set (); } Ответ = request.GetResponse (), когда он терпит неудачу и дает ошибку Вы должны обеспечить тело запроса, если вы установите ContentLength> 0 или SendChunked == верно. Сделайте это по телефону [Начало] GetRequestStream до [Begin] GetResponse. Любая помощь будет принята с благодарностью. } AllDone.Set (); } Ответ = request.GetResponse (), когда он терпит неудачу и дает ошибку Вы должны обеспечить тело запроса, если вы установите ContentLength> 0 или SendChunked == верно. Сделайте это по телефону [Начало] GetRequestStream до [Begin] GetResponse. Любая помощь будет принята с благодарностью.
user2664502
3

голосов
1

ответ
217

Просмотры

Как WebResponse не имеют «Утилизировать» публично видно, когда он реализует IDisposable?

После отладки через некоторый код недавно с участием WebResponse, я обнаружил, что проблема у меня было то, что я не был должным образом избавляясь от WebResponse перед выдачей другой. Я был прельстить, поскольку WebResponse должен быть отлит как IDisposable для того, чтобы на самом деле позвонить распоряжаться (или вы можете использовать «с помощью» для достижения той же цели). Так что мои вопросы: 1) Что такое Microsoft использует для достижения этой цели? IDisposable является интерфейсом, и поэтому публика, но каким-то образом WebResponse изменяет модификатор доступа к защищаемой в соответствии с doumentation MSDN. Я думал, что это было невозможно. 2) Какова польза от сокрытия распоряжаться таким образом? Почему бы просто не позволить webResponse.Dispose () действителен?
Seth Micalizzi
3

голосов
1

ответ
2.4k

Просмотры

Webview показывая только необработанный текст HTML на некоторых страницах

Я работаю над проектом, где мы заинтересованы в перехвате некоторых HTTP трафика с WebView, а затем приложить некоторые дополнительные заголовки запросов, а затем получить возврат назад и отобразить его в WebView. Для этого мы используем shouldInterceptRequest (вид WebView, URL String) метод, который возвращает WebResourceResponse, что WebView предполагается отобразить. Вот что я делаю: частный WebResourceResponse handleRequest (String URL) {Log.d (TAG, "Перехватив запрос по адресу:" + URL); HttpURLConnection соединение = NULL; URL АдресСервер = NULL; WebResourceResponse отклика = NULL; InputStream есть = NULL; тип String = NULL; Строка кодирования = NULL; INT StatusCode; ИНТ длина; попробуйте {// Устанавливает начальное соединение АдресСервера = новый URL-адрес (URL); Соединение = (HttpURLConnection) serverAddress.openConnection (); // Инициирование запроса HEAD, чтобы получить мета connection.setRequestMethod данных ( «голова»); // Пусть WebView обрабатывает запросы без каких-либо заголовков в них. Карта заголовков = connection.getHeaderFields (); если (заголовки == NULL) {Log.d (TAG, "Источник ответ с нулевыми заголовками на:" + URL); возвращать нуль; } StatusCode = connection.getResponseCode (); если (StatusCode == 200) {// OK, запрос делегата, если длина содержимого достаточно большой тип = connection.getContentType (); кодирование = connection.getContentEncoding (); длина = connection.getContentLength (); Log.d (TAG, "ТипСодержимая =" + тип + "кодирование =" + Кодирующий + "" + URL); connection.disconnect (); если (длина> SIZE_THRESHOLD) {// отсылает к другому Log.d устройства (TAG, «Делегирование запроса к другому устройству, НЕ РЕАЛИЗОВАЛИ»); // TODO: В настоящее время только обращение с ними локально. } Еще {соединения = (HttpURLConnection) serverAddress.openConnection (); connection.setRequestMethod ( "GET"); это = connection.getInputStream (); StatusCode = connection.getResponseCode (); тип = connection.getContentType (); кодирование = connection.getContentEncoding (); Log.d (TAG, "Готово Загрузка" + URL); вернуть новый WebResourceResponse (тип, кодирование, есть); }}} Задвижка (MalformedURLException е) {e.printStackTrace (); } Задвижка (ProtocolException е) {e.printStackTrace (); } Поймать (IOException е) {Log.d (TAG, "IOException, когда подключение к:" + URL + "StackTrace:" + Log.getStackTraceString (е)); } Возвращать ответ; } При попытке загрузить страницу как «www.madopskrifter.nu» или «www.newz.dk», то я получаю все содержимое просто отлично с отображаемыми картинками и все. Однако, если я просматриваю к страницам, как StackOverflow я просто получить индексный файл HTML в stackoverflow.com. Это то же самое для youtube.com. (У меня включили JavaScript в настройках WebView) Есть ли что-то мне не хватает? на данный момент я даже не добавляя свои собственные заголовки или что-нибудь, Я просто явно возвращался тот же ответ, за исключением того, что я получаю их «вручную». (Кроме того, я не сейчас обработки запросов с нулевыми заголовками, но даже если я закомментировать этот код, то проблема все еще существует). Любая помощь будет принята с благодарностью,
Simon Langhoff
6

голосов
2

ответ
1.3k

Просмотры

Почему же WebResponse не закончится при чтении твиттера шлангового потока?

Следующая функция будет тянуть вниз первые X сообщений из Twitter пожарного шланга, но выглядит как WebResponse блоков и никогда не выходит из функции: общественного недействительным GetStatusesFromStream (строка имя, строка пароль, Int nMessageCount) {WebRequest запрос = WebRequest.Create ( "HTTP: // stream.twitter.com/1/statuses/sample.json "); request.Credentials = новый NetworkCredential (имя пользователя, пароль); используя (ответ WebResponse = request.GetResponse ()) {используя (вар поток = response.GetResponseStream ()) {используя (вар читатель = новый StreamReader (поток)) {в то время как (! reader.EndOfStream) {Console.WriteLine (читатель. ReadLine ()); если (nMessageCount-- <0) перерыв; } Приставка. WriteLine ( "Start IDispose"); } Console.WriteLine ( "Никогда не будет здесь !!!"); }} Console.WriteLine ( "Готово - нажмите клавишу для выхода"); Console.ReadLine (); } Но следующие прекрасно работает: общественная пустота GetStatusesFromStreamOK (строка имя пользователя, строка пароля, внутр nMessageCount) {байт [] encbuff = System.Text.Encoding.UTF8.GetBytes (имя пользователя + ":" + пароль); //request.Headers.Add("Authorization», "Basic" + Convert.ToBase64String (encbuff)); Строка requestString = "GET /1/statuses/sample.json HTTP / 1.1 \ г \ п"; requestString + = "Разрешение:" + "Базовый" + Convert.ToBase64String (encbuff) + "\ г \ п"; requestString + = "Хост: stream.twitter.com \ г \ п"; requestString + = «Подключение: requestString + = "\ г \ п"; используя (TcpClient клиент = новый TcpClient ()) {client.Connect ( "stream.twitter.com", 80); используя (NetworkStream поток = client.GetStream ()) {// Отправить запрос. StreamWriter писатель = новый StreamWriter (поток); writer.Write (requestString); writer.Flush (); // обработать ответ. StreamReader РДР = новый StreamReader (поток); в то время как (rdr.EndOfStream!) {Console.WriteLine (rdr.ReadLine ()); если (nMessageCount-- <0) перерыв; }}} Console.WriteLine ( "Готово - нажмите клавишу для выхода"); Console.ReadLine (); } Что я делаю неправильно? requestString + = "\ г \ п"; используя (TcpClient клиент = новый TcpClient ()) {client.Connect ( "stream.twitter.com", 80); используя (NetworkStream поток = client.GetStream ()) {// Отправить запрос. StreamWriter писатель = новый StreamWriter (поток); writer.Write (requestString); writer.Flush (); // обработать ответ. StreamReader РДР = новый StreamReader (поток); в то время как (rdr.EndOfStream!) {Console.WriteLine (rdr.ReadLine ()); если (nMessageCount-- <0) перерыв; }}} Console.WriteLine ( "Готово - нажмите клавишу для выхода"); Console.ReadLine (); } Что я делаю неправильно? используя (TcpClient клиент = новый TcpClient ()) {client.Connect ( "stream.twitter.com", 80); используя (NetworkStream поток = client.GetStream ()) {// Отправить запрос. StreamWriter писатель = новый StreamWriter (поток); writer.Write (requestString); writer.Flush (); // обработать ответ. StreamReader РДР = новый StreamReader (поток); в то время как (rdr.EndOfStream!) {Console.WriteLine (rdr.ReadLine ()); если (nMessageCount-- <0) перерыв; }}} Console.WriteLine ( "Готово - нажмите клавишу для выхода"); Console.ReadLine (); } Что я делаю неправильно? используя (TcpClient клиент = новый TcpClient ()) {client.Connect ( "stream.twitter.com", 80); используя (NetworkStream поток = client.GetStream ()) {// Отправить запрос. StreamWriter писатель = новый StreamWriter (поток); writer.Write (requestString); writer.Flush (); // обработать ответ. StreamReader РДР = новый StreamReader (поток); в то время как (rdr.EndOfStream!) {Console.WriteLine (rdr.ReadLine ()); если (nMessageCount-- <0) перерыв; }}} Console.WriteLine ( "Готово - нажмите клавишу для выхода"); Console.ReadLine (); } Что я делаю неправильно? используя (NetworkStream поток = client.GetStream ()) {// Отправить запрос. StreamWriter писатель = новый StreamWriter (поток); writer.Write (requestString); writer.Flush (); // обработать ответ. StreamReader РДР = новый StreamReader (поток); в то время как (rdr.EndOfStream!) {Console.WriteLine (rdr.ReadLine ()); если (nMessageCount-- <0) перерыв; }}} Console.WriteLine ( "Готово - нажмите клавишу для выхода"); Console.ReadLine (); } Что я делаю неправильно? используя (NetworkStream поток = client.GetStream ()) {// Отправить запрос. StreamWriter писатель = новый StreamWriter (поток); writer.Write (requestString); writer.Flush (); // обработать ответ. StreamReader РДР = новый StreamReader (поток); в то время как (rdr.EndOfStream!) {Console.WriteLine (rdr.ReadLine ()); если (nMessageCount-- <0) перерыв; }}} Console.WriteLine ( "Готово - нажмите клавишу для выхода"); Console.ReadLine (); } Что я делаю неправильно? // обработать ответ. StreamReader РДР = новый StreamReader (поток); в то время как (rdr.EndOfStream!) {Console.WriteLine (rdr.ReadLine ()); если (nMessageCount-- <0) перерыв; }}} Console.WriteLine ( "Готово - нажмите клавишу для выхода"); Console.ReadLine (); } Что я делаю неправильно? // обработать ответ. StreamReader РДР = новый StreamReader (поток); в то время как (rdr.EndOfStream!) {Console.WriteLine (rdr.ReadLine ()); если (nMessageCount-- <0) перерыв; }}} Console.WriteLine ( "Готово - нажмите клавишу для выхода"); Console.ReadLine (); } Что я делаю неправильно?
martimedia
2

голосов
1

ответ
2.3k

Просмотры

Как избежать «Bad Request - Invalid Hostname» Ошибка при создании REST вызова от клиента Compact Framework?

Я использовал этот код здесь, чтобы попытаться вызвать метод REST контроллера на приложение сервера Web API от клиента Compact Framework: государственной статической силы SendXMLFile3 (строка Ури, строка данных) {WebRequest запрос = WebRequest.Create (Uri); request.Method = "POST"; Строка PostData = данные; байт [] ByteArray = Encoding.UTF8.GetBytes (PostData); request.ContentType = "применение / х-WWW-форм-urlencoded"; request.ContentLength = byteArray.Length; Поток DATASTREAM = request.GetRequestStream (); dataStream.Write (ByteArray, 0, byteArray.Length); dataStream.Close (); ответ WebResponse = request.GetResponse (); MessageBox.Show (((HttpWebResponse) ответ) .StatusDescription); DATASTREAM = response.GetResponseStream (); StreamReader читатель = новый StreamReader (Datastream); Строка responseFromServer = reader.ReadToEnd (); MessageBox.Show (responseFromServer); reader.Close (); dataStream.Close (); response.Close (); } ... Я раньше пробовал этот код, который я получил из книги "Microsoft .NET Framework Compact": государственной статической силы SendXMLFile2 (строка Uri, строковые данные) {WebRequest REQ = WebRequest.Create (URI); req.Method = "Сообщение"; req.ContentType = "текст / равнинная, кодировка = UTF-8"; байт [] encodedBytes = Encoding.UTF8.GetBytes (данные); req.ContentLength = encodedBytes.Length; Поток requestStream = req.GetRequestStream (); requestStream.Write (encodedBytes, 0, encodedBytes.Length); requestStream.Close (); WebResponse результат = req.GetResponse (); MessageBox.Show (result.ToString ()); } ... но я получаю "400 - Bad Request" с новым (как и старый) код. Моя первая попытка также не работает, с тем же результатом (400): открытые статические строки SendXMLFile (строка xmlFilepath, строка URI, внутр таймаут) {HttpWebRequest myHttpWebRequest = (HttpWebRequest) WebRequest.Create (URI); myHttpWebRequest.AllowWriteStreamBuffering = ложь; Строка PostData = "1david_dsd..."; // TODO: если это работает, замените его с реальными данными myHttpWebRequest.Method = «POST»; UTF8Encoding encodedData = новый UTF8Encoding (); байт [] ByteArray = encodedData.GetBytes (PostData); myHttpWebRequest.ContentType = "приложение / XML"; myHttpWebRequest.ContentLength = byteArray.Length; Поток newStream = myHttpWebRequest.GetRequestStream (); newStream.Write (ByteArray, 0, byteArray.Length); newStream.Close (); HttpWebResponse myHttpWebResponse = (HttpWebResponse) myHttpWebRequest.GetResponse (); вернуться myHttpWebResponse.StatusDescription; } Существует гораздо больше о изобилии вариаций я пытался здесь, где я достиг свою длина из-поста предела. UPDATE Обратите внимание, что код сервера не знает / волновало, что файл XML: [HttpPost] [Маршрут ( "апи / инвентарь / sendXML / {идентификатор пользователя} / {PWD} / {имя файла}")] общественность асинхронной Task SendInventoryXML ( Строка идентификатор пользователя, String PWD, строка имя_файла) {задача задача = Request.Content.ReadAsStreamAsync () ContinueWith (т => {вар поток = t.Result;., используя (FileStream FileStream = File.Create (String.Format (@ "C : \ HDP \ {0} .xml», имя_файла), (INT) stream.Length)) {байт [] bytesInStream = новый байт [stream.Length]; stream.Read (bytesInStream, 0, (INT) bytesInStream.Length); fileStream.Write (bytesInStream, 0, bytesInStream.Length); }}); } UPDATE 2 Я попытался Чарльз, чтобы увидеть, если он будет подобрать локальный трафик HTTP, но и глух к таким (как Скрипач, без особых ministrations, во всяком случае). Это то, что Чарльз выглядит после получения «400 - Bad Request» Ошибка: UPDATE 3 Я нашел это предложение где-нибудь, чтобы получить Fiddler, чтобы показать местным HTTP трафика: Инструменты -> Параметры Fiddler. Выберите вкладку Подключения. Проверьте опцию «Использовать PAC Script». ... но это не сработало - я до сих пор не видит HTTP-трафика при получении «400 (Bad Request)» сообщения. UPDATE 4 Я сейчас видим "400 (Bad Request)" в Fiddler 2, тоже; чтобы получить его, я вхожу одно из следующих действий в Почтальон (не видят этого в Fiddler, когда вы совершаете звонок из CE / CF / портативное приложение): Http: // SHANNON2: 21608 / API / инвентарь / sendXML / су / су / blablee // Hostname http://SHANNON2.:21608/api/inventory/sendXML/su/su/blablee // Hostname с Скрипач-fooler прилагается "" http://192.168.125.50:21608/api/inventory/sendXML/su/su/blablee // IP-адрес (Скрипач ничего не захватить, если я заменю имя хоста или IP-адрес с помощью «локального») Примечания: Для этих URL-адресов в Почтальон, у меня есть «Post» (в отличие от GET и т.д.) выбран, и приложенный файл XML. Inspectors.Headers в Fiddler показывает: POST / API / инвентарь / sendXML / су / су / blablee HTTP / 1.1 Хотя я считаю, что это небольшая доводка победа, я до сих пор не понимаю, почему я получаю «400» ошибка. Скрипач говорит мне, в панели Inspectors.WebView: Bad Request - Invalid Hostname --------------------------------------------- ----------------------------------- HTTP Error 400. запрос имени хоста недействительно. Как это может быть? Когда я запускаю его из Почтальон, я попал в точку останова на сервере - если имя хоста недействительно, почему оно достигается? UPDATE 5 Тестирование вызова от Скрипач Composer и Почтальон, единственный способ я могу достичь точки останова в коде сервера является использование «локальный» - замена, что с IPAddress ПК (192.168.125.50) или HostName (SHANNON2) не достигает точки останова. В то время как «интересный», называя «локальный» от портативного устройства, очевидно, не вариант. UPDATE 6 Относящиеся новый вопрос здесь. UPDATE 7 Суть бисквита добавлял в командной строке либо это: Netsh HTTP добавить urlacl URL = HTTP: // shannon2:
B. Clay Shannon
33

голосов
5

ответ
13.5k

Просмотры

Дразнящий WebResponse годов из WebRequest

Я, наконец, начал возиться с созданием некоторых приложений, которые работают с RESTful веб-интерфейсов, однако, я обеспокоен тем, что я ковкой их серверы каждый раз, когда я ударил F5, чтобы запустить серию тестов .. В принципе, мне нужно, чтобы получить серию веб-ответы, так что я могу проверить я правильно разборе различные ответы, а не хит своих серверов каждый раз, когда я думал, что я мог бы сделать это один раз, сохранить XML, а затем работать на местном уровне. Тем не менее, я не понимаю, как я могу «фиктивный» а WebResponse, поскольку (AFAIK) они могут быть созданы только WebRequest.GetResponse Как вы, ребята, идти о насмехаясь такого рода вещи? Вы? Я просто действительно не нравится тот факт, я молотком своих серверов: SI не хотите, чтобы изменить код слишком много, но я ожидаю, что это элегантный способ сделать это .. следующее обновление Accept Волю» s ответ был пощечина мне нужно, я знал, что я пропускал принципиальный момент! Создание интерфейса, который будет возвращать прокси-объект, который представляет собой XML. Реализовать интерфейс дважды, тот, который использует WebRequest, другой, который возвращает статические «ответы». Интерфейс implmentation затем либо конкретизирует тип возвращаемого на основе ответа, или статический XML. Затем вы можете пройти необходимый класс при тестировании или при производстве на уровне услуг. После того, как у меня есть код залетел, я вставить некоторые образцы. Интерфейс implmentation затем либо конкретизирует тип возвращаемого на основе ответа, или статический XML. Затем вы можете пройти необходимый класс при тестировании или при производстве на уровне услуг. После того, как у меня есть код залетел, я вставить некоторые образцы. Интерфейс implmentation затем либо конкретизирует тип возвращаемого на основе ответа, или статический XML. Затем вы можете пройти необходимый класс при тестировании или при производстве на уровне услуг. После того, как у меня есть код залетел, я вставить некоторые образцы.
Rob Cooper
4

голосов
1

ответ
16.3k

Просмотры

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

Я получаю следующее сообщение об ошибке, когда я пытаюсь получить WebResponse используя ответ WebResponse = request.GetResponse () Удаленный сервер возвратил ошибку: (422). в System.Net.HttpWebRequest.GetResponse () в HopSharp.HoptoadClient.Send (HoptoadNotice уведомления) в D: \ Projects \ ... dClient.cs: линия 65 Кто-нибудь есть идея об этом исключение?
Ramesh Soni
3

голосов
1

ответ
805

Просмотры

Как использовать HttpWebResponse и WebResponse в .NET Ядра?

Я портирование старого C # Shared Lib в библиотеку Standard. Однако я столкнулся с большим количеством ссылок System.Net.HttpWebResponse и System.Net.WebResponse. Раньше существовало на .Net Framework 4.5 Но я не смог найти подобные в стандарте .Net. Что я могу сделать, чтобы быть в состоянии использовать эти?
Daniel Santos
3

голосов
1

ответ
680

Просмотры

Как определить кодировку потока WebResponse?

Как определить кодировку потока WebResponse?
Vladimir Georgiev
3

голосов
3

ответ
647

Просмотры

Параллельный процесс интенсивной функции IO

У меня есть этот пример кода. Список объектов = новый список (); Еогеасп (строка URL в URL) {objects.add (processUrl (URL))} Мне нужно обрабатывать URL, processUrl вниз загрузить страницу и запустить много регулярных выражений, чтобы извлечь некоторую информацию и возвращает «C # JSON как» объект, так что я хочешь запустить это в параллелях и в конце концов, мне нужен список объектов, так что мне нужно ждать все задачи, чтобы продолжить процесс, как я могу это сделать? Я себе много примеров, но экономия возвращения нет. С уважением
waldecir
14

голосов
4

ответ
18.6k

Просмотры

Считывание данных из потока открытого HTTP

Я пытаюсь использовать .NET WebRequest / WebResponse классы для доступа к Twitter потокового API здесь «http://stream.twitter.com/spritzer.json». Мне нужно, чтобы иметь возможность открыть соединение и считывать данные с приращением от открытого соединения. В настоящее время, когда я вызываю метод WebRequest.GetResponse, он блокирует, пока весь ответ не будет загружен. Я знаю, что есть метод BeginGetResponse, но это будет делать то же самое на фоне потока. Мне нужно, чтобы получить доступ к потоку ответа во время загрузки все еще происходит. Это просто не представляется мне возможным с этими классами. Существует конкретный комментарий по этому поводу в документации Twitter: «Пожалуйста, обратите внимание, что некоторые клиентские библиотеки HTTP возвращают только тело ответа после того, как соединение было закрыто сервером Эти клиенты не будут работать для доступа к API Streaming.. Вы должны использовать клиент HTTP, который будет возвращать данные ответа постепенно. Большинство надежных библиотек HTTP клиент будет предоставлять эту функциональность. Apache HttpClient будет обрабатывать этот случай использования, например.»Они указывают на Appache HTTPClient, но это не помогает, потому что мне нужно использовать .NET. Любые идеи, возможно ли это с WebRequest / WebResponse, или у меня есть пойти на классы сетей более низкого уровня? Может быть, есть и другие библиотеки, которые позволят мне сделать это? Thx Аллен Любые идеи, возможно ли это с WebRequest / WebResponse, или мне придется идти на более низкие классы сетей уровня? Может быть, есть и другие библиотеки, которые позволяют мне это делать? Thx Аллен Любые идеи, возможно ли это с WebRequest / WebResponse, или мне придется идти на более низкие классы сетей уровня? Может быть, есть и другие библиотеки, которые позволяют мне это делать? Thx Аллен
user108687
2

голосов
0

ответ
108

Просмотры

Хотите кэшировать или сеанс WebResponse в проект библиотеки классов в C #

Использование ниже сценария в библиотеке проекта класса Для хранения и извлечения в WebResponse из кэша System.Web.HttpRuntime.Cache [ «cacheKey»] = соответственно; resp1 = (WebResponse) System.Web.HttpRuntime.Cache [ "cacheKey"]; соответственно = resp1; doc.Load (resp.GetResponseStream ()); ОШИБКА: Roor элемент отсутствует, но во время выборки, WebResponse отличается от WebResponse, который получает хранится. Ошибка не пришла, когда я непосредственно передать ответ Может кто-нибудь предложить мне причину или какой-либо другой код лучше? Или я должен пойти для использования сессии?
Vikrant
2

голосов
1

ответ
3.5k

Просмотры

WebRequest.GetResponse игнорирует мое значение тайм-аута?

Я пытаюсь установить почти-бесконечное значение тайм-аута на WebRequest, учитывая, что HTTP на основе API, который я запрашивая уже любезно обрабатывает таймаут, отправив обратно документ XML, который объявляет тайм-аут. По некоторым причинам, хотя, следующий код по-прежнему бросает исключение: Dim запрос Как WebRequest = WebRequest.Create ( «HTTP: // апи / CGI-BIN / сделать CMD = longRunningOperation & таймаут = 300») '^ команда возвращает тайм-аут, если не завершена в течение 300 секунд (5 минут) request.Timeout = Integer.MaxValue «поэтому нам не нужно на стороне клиента тайм-аут обработки Dim ответ As WebResponse = request.GetResponse ()» пока этот призыв взрывает мне очень жаль, что я могу» т обеспечить то, что вы можете отлаживать, но согласно MSDN, это то, как сделать это. Тем не менее, я все еще получаю WebException примерно через 100 секунд (сообщение: Операция истекла, состояние: WebExceptionStatus.Timeout). Может кто-нибудь объяснить такое поведение? (А если нет, предложить обходной путь?) EDIT Проблемы, вероятно, что-то делать с тем фактом, что этот фрагмент кода выполняется в задаче, но до сих пор, что до сих пор все, что я знаю. EDIT2 Выполнение кода в потоке пользовательского интерфейса по-прежнему бросает то же исключение, поэтому, возможно, что это не так ведь ... EDIT3 После хорошего ночного сна, я думаю, что это может делать это, потому что я не правильно закрывать мой ответ или потоки ответа , Я отправляю несколько запросов в то время как затянувшийся операция по-прежнему занят. Я могу себе представить, что есть глюк на более низком уровне, если вы не правильно распоряжаться здесь. Но для меня это трудно сказать, потому что я не знаю, внутренние работы классов WebRequest / WebResponse. Код, который я использую: HTTP: //code.google.com/p/dune-api-codepack/source/browse/ApiWrappers/DuneCommands/CommandResult.vb (не последний коммит, но эти различия не слишком велики) Проблемный метод GetResults (команда). Не против того, метод GetResultsAsync, это только проект (хотя это, вероятно, содержит ту же ошибку). EDIT4 Игнорируйте все, что я сказал, что проблема и решение в моем ответе ниже.
Steven Liekens
2

голосов
1

ответ
1.1k

Просмотры

Close WebResponse, or Leave Open?

Так что я делаю программу, которая в значительной степени делает сыпучие HttpWebRequests. В этой программе скорость главное. Если я могу найти пути повышения HttpWebRequests путем даже миллисекунды, то это отлично. Хорошо, так что мой вопрос заключается в следующем: у меня есть метод, который делает HttpWebRequest (GET запрос) на сайт, и другой метод, который делает POST HttpWebRequest для того же хоста (немного другой URL, но тот же хост), который называется ПОСЛЕ первый метод каждый раз в некоторое время. В моем первом методе (запрос GET, скажем, метод А), я закрываю WebResponse после того как я прочитал тело ответа. Является ли это быстрее покинуть этот WebResponse открытым, а затем вызвать метод POST (скажем, метод Б), или я должен сделать это, как я делаю это сейчас, закройте WebResponse от метода А? Пример кода: публичная строка Methoda () {// Сделать HttpWebRequest к URL, как: xxxx.yyyy.com WebResponse ответ = request.GetResponse (); Строка х = ReadResponseBody (ответ); response.Close (); если (x.Contains ( "что-то")) MethodB (); } Общественного недействительными MethodB () {// Создание POST HttpWebRequest в URL, как: xxxx.zzzz.com (тот же хост). ответ WebResponse = request.GetResponse (); response.Close (); } Таким образом, я должен оставить свой код, как это, закрыть первый WebResponse от Methoda (), а затем вызвать MethodB () или что-то еще? Кроме того, может кто-нибудь дать еще несколько советов о том, как улучшить скорость, так как это самое главное в моей программе, и мне нужно, чтобы это было как можно быстрее. } Общественного недействительными MethodB () {// Создание POST HttpWebRequest в URL, как: xxxx.zzzz.com (тот же хост). ответ WebResponse = request.GetResponse (); response.Close (); } Таким образом, я должен оставить свой код, как это, закрыть первый WebResponse от Methoda (), а затем вызвать MethodB () или что-то еще? Кроме того, может кто-нибудь дать еще несколько советов о том, как улучшить скорость, так как это самое главное в моей программе, и мне нужно, чтобы это было как можно быстрее. } Общественного недействительными MethodB () {// Создание POST HttpWebRequest в URL, как: xxxx.zzzz.com (тот же хост). ответ WebResponse = request.GetResponse (); response.Close (); } Таким образом, я должен оставить свой код, как это, закрыть первый WebResponse от Methoda (), а затем вызвать MethodB () или что-то еще? Кроме того, может кто-нибудь дать еще несколько советов о том, как улучшить скорость, так как это самое главное в моей программе, и мне нужно, чтобы это было как можно быстрее.
user2764359
10

голосов
1

ответ
6.6k

Просмотры

WebRequest.GetResponse запирает?

При написании ниже моего кода блокируется на GetResponse. Зачем? попробуйте {WebRequest myWebRequest = WebRequest.Create (strURL); WebResponse myWebResponse = myWebRequest.GetResponse (); // больше кода здесь
3

голосов
2

ответ
1.7k

Просмотры

Как получить IP-адрес сервера в ответ на WebResponse C #

Я пытаюсь найти IP-адрес (не имя хоста), который ответил на мой WebRequest в C #. Я не хочу, чтобы сделать разрешение DNS, потому что их случаи, когда DNS записи, возвращаемые не являются серверы, отвечающие на запрос. Для Ex: Client -> Load Balancer -> Веб-сервер Сервер DNS будет реагировать с IP балансировки нагрузки в. Предполагая, реагирующий веб-сервер не собирается обратно через Load Balancer, то IP-адрес будет затем фактический веб-сервер, который является то, что я пытаюсь найти.
Traderde
2

голосов
2

ответ
2.7k

Просмотры

Прочитайте свойство Realm в аутентификации HTTP [закрыт]

Как я могу прочитать свойство Realm, переданную в заголовке WWW-Authenticate сервером запрашивающий HTTP обычную проверку подлинности?
T4mer