es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Llamada Curl desde C#

Tengo que hacer una llamada curl simple desde C# a una api.
curl https://payxxx.xx/post_api
-d “apikey=TUCLAVEAPI”
-d “command=create_pay”
-d “params={\”amount\”:2569,\”description\”:\”Un nuevo pago\”}”

Necesito guardar la respuesta.
He visto ejemplos con httpclient pero no puedo hacerlo funcionar.

var client = new HttpClient();


        var requestContent = new FormUrlEncodedContent(new[] {new KeyValuePair("text", "apikey=xxxxxxx"),
        new KeyValuePair("text", "command=create_pay"),
        new KeyValuePair("text", "params={\\'amount\\':2569,\\'description\\':\\'Un nuevo pago\\',\\'pay_methods\\':\\'\\'}"),
        });



        HttpResponseMessage response = await client.PostAsync("https://payxxx.xx/post_api", requestContent);


        HttpContent responseContent = response.Content;


        using (var reader = new StreamReader(await responseContent.ReadAsStreamAsync()))
        {

            MessageBox.Show(await reader.ReadToEndAsync());
        }

Siempre obtengo una clave API incorrecta (es la correcta), creo que no estoy enviando la llamada correctamente.
¡Gracias de antemano!

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que el problema podría estar en la forma en que se pasan los parámetros en el código de C#. La solicitud de tipo curl tiene tres parámetros que se pasan usando la bandera -d, pero en el código de C#, los parámetros se pasan como una matriz de pares clave-valor utilizando la clase FormUrlEncodedContent.

    En lugar de utilizar la clase FormUrlEncodedContent, puedes crear un objeto StringContent con los parámetros en el formato correcto y establecer el encabezado Content-Type a “application/x-www-form-urlencoded”. Aquí tienes un ejemplo:

    var client = new HttpClient();
    
    var parameters = "apikey=TU_CLAVE_API&command=create_pay&params={\"amount\":2569,\"description\":\"Un nuevo pago\"}";
    
    var requestContent = new StringContent(parameters, Encoding.UTF8, "application/x-www-form-urlencoded");
    
    HttpResponseMessage response = await client.PostAsync("https://payxxx.xx/post_api", requestContent);
    
    var responseContent = await response.Content.ReadAsStringAsync();
    
    Console.WriteLine(responseContent); // o haz lo que quieras con la respuesta
    

    Esto debería enviar los parámetros en el mismo formato que la solicitud de curl y, con suerte, obtener la respuesta correcta del API.

Comments are closed.