Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá a todos,
Venho pedir uma ajuda já que não saco de C#, meu problema é que tenho que fazer um envio de um XML, via requisção via POST http para consumo via protocolo RESTful e uso CURL no php. Tenho uma variável que recebe o formato XML (formato e não arquivo, não preciso gerar arquivo XML) tenho o cenário abaixo funcional é bem curtinho e simples:
<?php
L1. $xml = (conteúdo no formato XML) // até aqui eu fiz no C#
L2. $URL = "https://www.enderecoweb.com.br/api/rest?";
L3. $ch = curl_init($URL);
L4. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
L5. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
L6. curl_setopt($ch, CURLOPT_POST, 1);
L7. curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/xml'));
L8. curl_setopt($ch, CURLOPT_POSTFIELDS, "$xml");
L9. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
L10. curl_exec($ch);
?>
Agora minha pergunta como faço isso no C# ?
**** Preciso desse trecho abaixo da linha 2 a linha 10.
Meu código feito no VisualStudio 2015,abri um projeto Console, ficou com o código abaixo:
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Xml.Linq;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
/ Monta o XML /
XDocument envia = new XDocument(
new XDeclaration("1.0", "utf-8", "yes"),
new XElement("request",
new XElement("authorization",
new XElement("username", "usuario_diego"),
new XElement("password", "PKy78mi1WeJ"),
new XElement("key", "B8Kz4RqYZoiN32#")),
new XElement("method","SendByLote"),
new XElement("messages",
new XElement("recipient",
new XElement("text", "Teste C#"),
new XElement("mobile", "47xxxxxxxxx")
)//fecha recipient
)//fecha messages
)//fecha request
);//fecha xDocument
Console.WriteLine(envia); //imprimi o XML em tela
Console.ReadLine(); //dar uma pausa, esperar um comando para fechar o prompt
}
/* Fim do XML */
} //fecha programa
} //fecha namespaceOpa, bom dia.
Cara agradeço muito a sua ajuda mais não estou conseguindo usar essa passagem de código que me deu, não saco nada de C# nem as bibliotecas que tenho que chamar... Só consegui com webRequest chegar perto do envio.
Eu tentei fazer assim e jã consigo fazer a requisição porém me da erro 500 internal server erro pois não consigo passar o xml junto a requsição POST. Se puder me quebrar esse galho em cima dessa programação que está quase lá rssss Só se puder, me desculpa o mau jeito kara.
**** o XML só consegui assim tb mais esta perfeito, rs cheio de new... podia montar um arquivo separado e chamar no path, mais assim já esta de boa, só preciso de um teste funcional desta API.
var xml = sms; (esta contido o XML dentro dessa variável xml) agora como passar esse troço ? hehe
Se puder me ajudar ficaria muito grato
using System;
using System.Collections.Generic;
using System.IO;
using System.Xml.Linq;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
using System.Web;
using System.Net;
using System.Net.Http;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
/ Monta o XML /
XDocument sms = new XDocument(
new XElement("request",
new XElement("authorization",
new XElement("username","diegobaiao"),
new XElement("password", "y36rta42"),
new XElement("key", "FxF6eJXx1nafAI1")
),// fecha authorization
new XElement("method","SendSmslote"),
new XElement("messages",
new XElement("recipient",
new XElement("text", "Teste C"),
new XElement("mobile", "479xxxxxxxx")
) //fecha recipient
) //fecha messages
) //fecha request
); //fecha document
//Console.WriteLine(sms);
//Console.ReadLine();
var xml = sms;
/* Fim do XML */
/* Inicio requisição POST */
WebRequest request = WebRequest.Create("[https://www.endereçosite/envia/api/rest?");](https://www.xn--endereosite-r9a/envia/api/rest?)
request.Method = "POST";
request.ContentType = "application/xml";
// falta passar a variavel XML junto ao post
WebResponse resposta = request.GetResponse();
StreamReader rd = new StreamReader(resposta.GetResponseStream(), Encoding.UTF8);
//Console.WriteLine(xml);
//Console.WriteLine(resposta);
Console.ReadLine();
/* Fecha requisição POST */
} //fecha voidmain
} //fecha programa
} // fecha namescpaceSó para avisar consegui fazer, e estava tudo pronto no tutorial do MSDN.
https://msdn.microsoft.com/pt-br/library/debx8sh9(v=vs.110).aspx.aspx)
O meu daria certo também,porém teria que fazer uma conversão da minha variável que recebe o formato XML de (meus varios news rs) para String para então usar com StreamWriter e enviar junto ao webrequest, porém com esse código abaixo esta muito mais simples e entendimento fácil.
Mais ainda vou tentar fazer essa conversão hehehehe.
Alterei apenas duas coisas:
string postData = "COLOCAR O XML COMPLETO COM TODAS AS TAGS";
WebRequest request = WebRequest.Create ("ENTRAR COM O ENDEREÇO DA API");
Meu caro amigo consegui fazer exatamente com o código abaixo:
using System;
using System.IO;
using System.Net;
using System.Text;
namespace Examples.System.Net
{
public class WebRequestPostExample
{
public static void Main ()
{
// Create a request using a URL that can receive a post.
WebRequest request = WebRequest.Create ("http://www.contoso.com/PostAccepter.aspx " );
// Set the Method property of the request to POST.
request.Method = "POST";
// Create POST data and convert it to a byte array.
string postData = "This is a test that posts this string to a Web server.";
byte[] byteArray = Encoding.UTF8.GetBytes (postData);reader.Close ();
dataStream.Close ();
response.Close ();
}
}
}Se funcionou, sucesso :D
Blz obrigado.
Quantos 'new' kkk
Cara, da uma olhada aqui > http://forum.imasters.com.br/topic/554225-utilizando-api-c-windows-form/