C sharp - Variable enviando POST a un web service

   
Vista:

Variable enviando POST a un web service

Publicado por Luis vasquez (3 intervenciones) el 20/03/2018 18:34:28
Buenas tardes, espero puedan darme una mano con lo siguiente, ya que no manejo C# para nada.

Existe un web service de un proveedor (externo) de servicios de hotelería. No disponemos de la documentación del mismo. Solo dispongo de un código en C# como referencia, pues el objetivo es crear lo mismo usando PHP.

No quiero (ni puedo) cambiar dicho código (ni siquiera ejecutarlo). Sólo lo estoy usando como referencia debido a que no tengo la documentación del web service del proveedor.

La lógica me dice que si voy a enviar un POST al url del web service necesito saber el nombre de la (o las) variable(s) que el web service entienda. ¿Correcto? Igual que cuando envías un formulario, la página que lo procesa debe recibir vía POST los datos en una variables específicas.

Pues, tengo este código en C# y no veo como se denomina la variable que se envía por POST:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
string v_strURL = Helper.URL_DETAIL_HOTEL.ToString(); // Url del web service
 
strXML = "<?xml version='1.0' encoding='utf-8'?>";
strXML += "<GetHotelDetailRequest user='raymundo' password='123456'>";
strXML += "<Language>es</Language>";
strXML += "<DestinationCode>CUN</DestinationCode>";
strXML += "<Broker>Hotelbeds</Broker>";
strXML += "<HotelCode>4894</HotelCode>";
strXML += "<HotelName>CasaMagna+Marriott+Cancun+Resort</HotelName>";
strXML += "<AvailToken>1HdC5yhCq7GbGe2NtxA8Zwiy</AvailToken>";
strXML += "</GetHotelDetailRequest>";
 
XmlDocument XMLResponse = null;
XmlDocument xmldoc = new XmlDocument();
 
//Declare an HTTP-specific implementation of the WebRequest class.
HttpWebRequest objHttpWebRequest;
 
//Declare an HTTP-specific implementation of the WebResponse class
HttpWebResponse objHttpWebResponse = null;
 
//Declare a generic view of a sequence of bytes
Stream objRequestStream = null;
Stream objResponseStream = null;
DataSet datasetD = new DataSet();
DataTable tblHotelData = new DataTable();
 
//Declare XMLReader
XmlTextReader objXMLReader;
 
objHttpWebRequest = (HttpWebRequest)WebRequest.Create(v_strURL);
 
try  {
 
    //Set HttpWebRequest properties
    byte[] bytes;
    bytes = System.Text.Encoding.UTF8.GetBytes(strXML);
    objHttpWebRequest.Method = "POST";
    objHttpWebRequest.ContentLength = bytes.Length;
    objHttpWebRequest.ContentType = "application/x-www-form-urlencoded";
 
    //Get Stream object 
    objRequestStream = objHttpWebRequest.GetRequestStream();
 
    //Writes a sequence of bytes to the current stream 
    objRequestStream.Write(bytes, 0, bytes.Length);
 
    //Close stream
    objRequestStream.Close();
 
    //---------- End HttpRequest
 
    //Sends the HttpWebRequest, and waits for a response.
    objHttpWebResponse = (HttpWebResponse)objHttpWebRequest.GetResponse();
 
}

Como pueden ver, la varible strXML contiene un xml que debe ser enviado por POST al web service.

Alli se declara bytes que guarda una especie de conversión de strXML, sin embargo, al enviar el post se escribe simplemente
1
objRequestStream.Write(bytes, 0, bytes.Length);
pero en ninguna parte se hace mención al nombre de la variable.

Espero que puedan entenderme.

Saludos y de antemano muchas gracias,
Luis
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Variable enviando POST a un web service

Publicado por Yamil Bracho (1132 intervenciones) el 20/03/2018 18:57:40
Segun veo el codigo que muestras debe tratarse de un servicio SOAP asi que es mas facil que lo agregues como referencia en Visual Studio.
Si despues vas a pasar el codigo a PHP entonces puedes usar la clase SoapClient
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Variable enviando POST a un web service

Publicado por Luis vasquez (3 intervenciones) el 20/03/2018 19:53:20
Gracias Yamil,

Mi pregunta es ¿No puede determinarte allí como se llama la variable que debe recibir el web service?

Se supone que, independientemente del lenguaje usado, el web service debe recibir el post en una variable ¿no es así?

saludos,
Luis
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Variable enviando POST a un web service

Publicado por Yamil Bracho (1132 intervenciones) el 20/03/2018 20:11:54
Todo lo recibes en stream de bytes o un string. Por ejemplo si tienes un servicio que te retorna los datos de un producto, la llamada seria algo como

1
2
3
4
5
6
7
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
     <getProductDetails xmlns="http://warehouse.example.com/ws">
       <productId>827635</productId>
     </getProductDetails>
   </soap:Body>
</soap:Envelope>

Y la respuesta del webservice seria

1
2
3
4
5
6
7
8
9
10
11
12
13
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
     <getProductDetailsResponse xmlns="http://warehouse.example.com/ws">
       <getProductDetailsResult>
         <productName>Toptimate 3-Piece Set</productName>
         <productId>827635</productId>
         <description>3-Piece luggage set.  Black Polyester.</description>
         <price>96.50</price>
         <inStock>true</inStock>
       </getProductDetailsResult>
     </getProductDetailsResponse>
   </soap:Body>
 </soap:Envelope>

Si lo refrencias en tu aplicacion .NET seria (proxy es la referencia a tu web service)
1
var respuesta = proxy.getProductDetails("827635");

En respuesta tendrias productName, productId, description, price y inStock

respuesta lo puedes definir como una instancia de una clase que te englobe los resultados. Por ejemplo
1
2
3
4
5
6
7
8
public class ProductDetails
{
    public string ProductName { get; set; }
    public string ProductId {get;set;}
    public string Description { get; set; }
    public double Price { get; set; }
    public bool InStock { get; set; }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Variable enviando POST a un web service

Publicado por Luis vasquez (3 intervenciones) el 21/03/2018 01:39:19
Gracias Yamil, por tu tiempo, sin embargo, creo que no estoy explicandome correctamente.

Supongamos por un momento que no es un web service sino un formulario simple, que te pide correo y nombre.

En un proceso de navegación normal (via browser) el usuario escribiría su correo, su nombre y le daría "enviar". Un script (lo llamaremos procesar.aspx) recibe los datos y actualiza una base de datos. ¿vamos bien hasta acá?

Ahora imaginemos que yo te pido que hagas un bot en C# que envíe la data, simulando el llenado del formulario.

Lo primero que me pedirás es ¿cómo se llaman las variables que recibe el script llamado procesar.aspx En este caso es muy simple porque abres el archivo procesar.aspx y ves los nombres que recibe vía post y creas el programa en #C

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
string v_strURL = procesar.aspx
nombre = "Luis";
correo  = "luis@loquesea.com";
 
XmlDocument XMLResponse = null;
XmlDocument xmldoc = new XmlDocument();
 
//Declare an HTTP-specific implementation of the WebRequest class.
HttpWebRequest objHttpWebRequest;
 
//Declare an HTTP-specific implementation of the WebResponse class
HttpWebResponse objHttpWebResponse = null;
 
//Declare a generic view of a sequence of bytes
Stream objRequestStream = null;
Stream objResponseStream = null;
 
DataSet datasetD = new DataSet();
DataTable tblHotelData = new DataTable();
 
//Declare XMLReader
XmlTextReader objXMLReader;
 
objHttpWebRequest = (HttpWebRequest)WebRequest.Create(v_strURL);
 
try  {
    //Set HttpWebRequest properties
    byte[] bytes;
    bytes = System.Text.Encoding.UTF8.GetBytes(?????);
    objHttpWebRequest.Method = "POST";
    objHttpWebRequest.ContentLength = bytes.Length;
    objHttpWebRequest.ContentType = "application/x-www-form-urlencoded";
 
     //Get Stream object 
    objRequestStream = objHttpWebRequest.GetRequestStream();
 
     //Writes a sequence of bytes to the current stream 
    objRequestStream.Write(bytes, 0, bytes.Length);
 
     //Close stream
 
    objRequestStream.Close();
 
     //---------- End HttpRequest
 
 
    //Sends the HttpWebRequest, and waits for a response.
 
    objHttpWebResponse = (HttpWebResponse)objHttpWebRequest.GetResponse();


Hay mucho código aqui que no se requiere para el ejemplo, pero lo que quiero que me digas es ¿cómo envío yo cada valor en la variable correspondiente? ¿Cómo le digo a procesar.aspx que el nombre es el nombre y el correo es el correo?

Espero haberme explicado. La verdad es que la falta de conocimiento del lenguaje me hace preguntar cosas muy básicas que los expertos ni siquiera lo consideran una duda aceptable.

Saludos y gracias,
Luis
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Revisar política de publicidad