none
Como enviar um xml via post com autenticação de token usando csharp ? RRS feed

  • Pergunta

  • Amigos tenho um código em html e preciso enviar de modo automático usando código em csharp, dentro deste html existe um  form que tem uma caixa de texto que recebe um token(uma chave) e duas textarea que recebem um xml cada uma, usando aspnet foi tranquilo e retornou o xml desejado, mas quero fazer uma programa que rode sozinho sem ter interface com usuário, por me ajudem  obrigado.

    Segue abaixo o código HTML que eu envio para o servidor via POST e me retorna um código XML

    </head>

    <body>

        <form method="post" action="http://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx">

            <br>

            <br>

     <b>Token:</b><br>

    <input type="text" id="token" name="Token" value="zzzzzzzzzzzyyyyyyaaaa"></input><br>

     

                <b>Filtro de campos do atendimento (tipo XML) (parâmetro FieldFilter) :</b><br>

                <textarea id="txtFields" name="Fields"><Fields>

         <Agents>true</Agents>

        <Customers>true</Customers>

        <Classifications>true</Classifications>

        <Classification>

            <Forms>true</Forms>

            <Processes>true</Processes>

        </Classification>

        <Survey>

           <Initial>true</Initial>

            <Contact>true</Contact>

            <Final>true</Final>

        </Survey>

        <ContactDetail>

            <Chat>true</Chat>

            <Mail>false</Mail>

            <Phone>false</Phone>

            <ChatDetails>

               <Dialog>true</Dialog>

            </ChatDetails>

            <MailDetails>

                <Body>false</Body>

                <Attachments>false</Attachments>

            </MailDetails>

            <PhoneDetails>

            </PhoneDetails>

        </ContactDetail>        

    </Fields></textarea><br>

     

                <b>Filtro de registros (intervalo de atendimentos) (tipo XML) (parâmetro ContactFilter) :</b><br>

                <textarea id="txtContactFilter" name="ContactFilter">

                <ContactFilter>

        <StartID>1</StartID>

        <Quantity>200</Quantity>

        <StartedBetween>

            <Initial>2011-09-05T00:00:00.000</Initial>

            <Final>2011-09-05T00:00:00.000</Final>

        </StartedBetween>

        <FinishedBetween>

            <Initial>2011-09-05T17:00:00.000</Initial>

            <Final>2011-09-05T17:00:00.000</Final>

        </FinishedBetween>

        <Channel>

        <ID>1</ID>

        </Channel>

        <State>

        <IDs>

          <ID>7</ID>

          <ID>8</ID>

          <ID>9</ID>

          <ID>10</ID>

          <ID>11</ID>

          <ID>12</ID>

          <ID>14</ID>

          <ID>15</ID>

          <ID>16</ID>

          <ID>17</ID>

          <ID>18</ID>

          <ID>19</ID>

          <ID>25</ID>

          <ID>26</ID>

          <ID>27</ID>

          <ID>29</ID>

          <ID>32</ID>

        </IDs>

        </State>

    </ContactFilter>

     

      </textarea><br>

     

    <input type="submit" value="Executar Ação de retorno XML">

     

    </body>

    </html>

     

     

     

    Este código tem que ser enviado para o servidor e ele retorna um XML, usando o form pela web, o que eu quero fazer é a mesma coisa só que usando código em C# de forma automática sem a interface com o usuário.

     

    Obrigado.

    quinta-feira, 12 de janeiro de 2012 23:06

Todas as Respostas

  • Thomas,

    Veja se este link te ajuda em algo:

    http://www.netomatix.com/httppostdata.aspx


    André Alves de Lima
    Microsoft MVP - Client App Dev
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima
    sexta-feira, 13 de janeiro de 2012 10:41
  • Olá Andre

        Este exemplo que vc passou consegui utiliza-lo só que o erro que está dando é que os parâmetros que eu envio estão errados conforme código abaixo , gostaria de saber se estou enviando os parâmetros corretos para o web service entender e me devolver uma string "XML".Conforme acima os parâmetros que eu estou enviando são um input cujo value é uma "string" mas dentro dela é um parâmetro em xml e como faço para enviar este xml para o servidor utilizando este código ? Obrigado

    #region Solução_1

                //Cria uma request usando a URL que pode receber um post.

                string url = "http://xxxxxxx /Default.aspx?Api=xxxxxContatos";

     

                WebRequest request = WebRequest.Create(url);

     

                // Set o method propriedade do request POST.

                request.Method = "POST";

     

     

                //Recebe os parâmetros.

     

                StringBuilder token = new StringBuilder();

                token.Append("'<input type='text' id='kenye'  name='Kenye' value='zyz'></input>");

     

                StringBuilder postFields = new StringBuilder();

                postFields.Append("<>");

                postFields.Append("<>");

                postFields.Append("<>");

                postFields.Append("<>");

                postFields.Append("<>");

                postFields.Append("<>");

                postFields.Append("<>");

                postFields.Append("</PhoneDetails></ContactDetail></XXX></textarea>");

     

                StringBuilder postContact = new StringBuilder();

                postContact.Append("aaa");

                postContact.Append("aaaa");

                postContact.Append("yyyyyyyyyyyyyyyyyyyyyyyyyyy");

                postContact.Append("yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy”);

     

                string postData = token.ToString() + postFields.ToString() + postContact.ToString();

     

     

               //Cria um POST dos dados e converte este para um array do tipo byte.

                byte[] byteArray = Encoding.UTF8.GetBytes(postData.ToString());

     

     

     

                //Set the Tipo de Conteúdo para o WebRequest.

                request.ContentType = "application/x-www-form-urlencoded";

                //request.ContentType = "text/html";

     

                //Set o ContentLengh propriedade da WebRquest.

                request.ContentLength = byteArray.Length;

     

                //Solicita o request stream.

                Stream dataStream = request.GetRequestStream();

     

                //Escreve os dados para o request stream.

                dataStream.Write(byteArray, 0, byteArray.Length);

     

                // Fecha objeto Stream.

                dataStream.Close();

     

                // Solicita a resposta.

                WebResponse response = request.GetResponse();

     

                // Display the status.

                Console.WriteLine(((HttpWebResponse)response).StatusDescription);

     

     

                //Solicita o stream conteúdo retornado do servidor.

                dataStream = response.GetResponseStream();

     

                //Abre o stream usando a StreamReader para fácil acesso.

                StreamReader reader = new StreamReader(dataStream);

     

                // Leitura do conteúdo.

                string responseFromServer = reader.ReadToEnd();

     

                //Mostra o contéudo.

                Console.WriteLine(responseFromServer);

     

                //Limpa as streams.

                reader.Close();

                dataStream.Close();

                response.Close();

     

     

     

                #endregion

    terça-feira, 17 de janeiro de 2012 23:13