Nano Hash - криптовалюты, майнинг, программирование

Чтение XML-ответа со страницы

Я использую С# и ASP.net для выполнения POST на веб-страницу. Как я могу прочитать XML-ответ, чтобы узнать, были ли в моей отправке ошибки или она прошла успешно?

Это то, что я пробовал, но он вернет только сообщение об успехе/неуспехе, он не покажет мне фактический xml, возвращенный со страницы.

private void Perform()
{
    this.lblResult.Text = string.Empty;
    Dictionary<string, string> dictFormValues = new Dictionary<string, string>();
    string connectionString = null;
    SqlConnection cnn;
    SqlCommand cmd;
    StringBuilder sql = new StringBuilder();
    SqlDataReader reader;
    string email = string.Empty;
    connectionString = "Data Source=server;Initial Catalog=db;User ID=;Password=";
    sql.Append("select TOP 1 maexst ");
    sql.Append("from redbone.redlight.dbo.maxima ");

    cnn = new SqlConnection(connectionString);
    try
    {
        cnn.Open();
        cmd = new SqlCommand(sql.ToString(), cnn);
        reader = cmd.ExecuteReader();
        while (reader.Read()) { dictFormValues.Add("maexst", reader.GetValue(0).ToString()); }
        reader.Close();
        cmd.Dispose();
        cnn.Close();
    }
    catch (Exception ex) { Response.Write(ex.Message.ToString()); }
    string strIpAddress = System.Web.HttpContext.Current.Request.UserHostAddress;
    string strPageTitle = this.Title;
    string strPageURL = System.Web.HttpContext.Current.Request.Url.AbsoluteUri;
    string strError = "";
    bool blnRet = false;
    blnRet = Post(dictFormValues, strPageTitle, strPageURL, ref strError);
    if (blnRet == true)
    {
        this.lblResult.Text = "It was good!";
    }
    else { this.lblResult.Text = strError + ": Error Occured"; }
}

public bool blnRet(Dictionary<string, string> dictFormValues, string strPageTitle, string strPageURL, ref string strMessage)
{
    string strEndpointURL = string.Format("http://testtest12test123.aspx");

    System.Web.Script.Serialization.JavaScriptSerializer json = new System.Web.Script.Serialization.JavaScriptSerializer();
    string strPostData = "";
    foreach (var d in dictFormValues) { strPostData += d.Key + "=" + Server.UrlEncode(d.Value) + "&"; }
    strPostData += "hs_context=";
    System.Net.HttpWebRequest r = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(strEndpointURL);
    r.Method = "POST";
    r.Accept = "application/json";
    r.ContentType = "application/x-www-form-urlencoded";
    r.ContentLength = strPostData.Length;
    r.KeepAlive = false;
    using (System.IO.StreamWriter sw = new System.IO.StreamWriter(r.GetRequestStream()))
    {
        try { sw.Write(strPostData); }
        catch (Exception ex)
        {
            strMessage = ex.Message;
            return false;
        }
    }
    return true; 
}

ИЗМЕНИТЬ

ОТВЕТ ОБ УСПЕХЕ

<?xml version="1.0" encoding="utf-8" ?>
<result>
   <success>1</success>
   <postid>12345</postid>
   <errors/>
</result>

НЕ ОТВЕТ

<?xml version="1.0" encoding="utf-8" ?>
<result>
   <success>0</success>
   <postid/>
   <errors>
      <error>Error Listed Here</error>
      <error>Error 2 Listed Here</error>
      <error>Error 3 Listed Here</error>
   </errors>
</result>
18.01.2016

  • Чтобы прочитать веб-ответ, вы можете вызвать r.GetResponseStream() и прочитать его с помощью потокового чтения или напрямую с помощью xmldocument. 18.01.2016
  • @ bdn02 - можете ли вы привести такой пример? 20.01.2016

Ответы:


1

Пытаться:

var request = WebRequest.Create("http://some.website/") as HttpWebRequest; 
var response = request.GetResponse();

Stream receiveStream = response.GetResponseStream();
StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8);

var result =  readStream.ReadToEnd();

Это поместит содержимое страницы в result

Что делать дальше, зависит от того, каков на самом деле ответ... Оттуда вы можете использовать:

  • XmlDocument.LoadXml
  • XDocument.Parse
  • XElement.Parse

Или, возможно, что-то вроде HTML Agility Pack позволит вам проанализировать ответ.


Пример использования XElement

using System.Xml.Linq;
using System.Linq;
using System.Xml;

var xml = System.Xml.Linq.XElement.Parse(result);
if (xml.Elements("success").FirstOrDefault().Value == "1")
{
   // Process Success
   Console.WriteLine("All Worked!");
}
else
{
   var errors = xml.Elements("errors");
   foreach (var error in errors.Elements("error"))
   {
     // read error messages
     Console.WriteLine(error.Value);
   }
}

(Runnable Fiddle)

Вероятно, есть более простой способ разбора XElement, но это должно дать вам представление.

18.01.2016
  • это ставит меня на 1 шаг ближе, спасибо! Я только что отредактировал свой пост, чтобы показать, как отправляется ответ, как я могу разобрать ответ из переменной result 18.01.2016
  • Я получаю сообщение об ошибке: «System.Collections.Generic.IEnumerable‹System.Xml.Linq.XElement›» не содержит определения для «Элементов» и метода расширения «Элементы», принимающего первый аргумент типа «System.Collections». .Generic.IEnumerable‹System.Xml.Linq.XElement›» может быть найден (вам не хватает директивы using или ссылки на сборку?) 19.01.2016
  • У вас есть using System.Xml.Linq; и using System.Linq; ? 19.01.2016
  • @FunFlyWhiteGuy Я добавил исполняемую скрипту .net. 19.01.2016
  • @NikolaiDante - не могли бы вы показать полный рабочий пример? 20.01.2016
  • @user2676140 user2676140 IIRC, код почти завершен, единственный недостающий функциональный бит заключается в том, что some.website (очевидно) не вернет XML OP. Если у вас есть похожий вопрос, вы всегда можете спросить :-) 20.01.2016
  • @NikolaiDante - я не понимаю, к какому месту размещения кода относится ваш синтаксис XML? 20.01.2016
  • Новые материалы

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

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..