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

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.
- Movido Levi DomingosModerator domingo, 22 de janeiro de 2012 00:37 (De:C#)
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 -
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