Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

HTTP request with C#

I want to convert the Object received in the function and do as needed to convert it to an object ({"some_key": "some_value"}).

Here is my code:

public HttpRequests(string url, string method, Object data)
{

   //The following prepares data, according to received parameter

    if (data is Array)
    {
        data = (Array)data;
    }
    else if (data is Dictionary<Object, Object>)
    {
        data = ((Dictionary<string, string>)data)["something"] = platform_secret;
        data = ((Dictionary<string, string>)data)["something2"] = "1";
    }

    method = method.ToUpper(); //POST or GET

    this.url = just_url + url;
    this.data = Newtonsoft.Json.JsonConvert.SerializeObject(data);
    this.method = method;

}

public Object performRequest()
{

    if (this.data != null && url != null)
    {

        WebRequest request = HttpWebRequest.Create(url);

        byte[] data_bytes = Encoding.ASCII.GetBytes(Convert.ToChar(data)[]);
        //^ this does not work. Am I supposed to do this?
        // as I said, what I want is to get an object {key: something} that can be read
        //      by $_POST["key"] in the server

        request.Method = method;
        request.ContentType = "application/x-www-form-urlencoded"; //TODO: check
        //request.ContentLength = ((Dictionary<string, string>) data);
        request.ContentLength = data_bytes.Length;

        Stream dataStream = request.GetRequestStream(); //TODO: not async at the moment

        //{BEGIN DOUBT

        dataStream.Write(data_bytes, 0, data_bytes.Length);
        dataStream.Close();

        //DOUBT: DO THIS ^ or THIS:_      ???

        StreamWriter writer = new StreamWriter(dataStream);
        writer.Write(this.data);

        //End DOUBT}

        WebResponse response = request.GetResponse();
        Stream dataResponse = response.GetResponseStream();

        writer.Close();
        response.Close();
        dataStream.Close();

        return dataResponse.

    }

What exactly am I missing here?

like image 817
Fane Avatar asked Dec 21 '25 22:12

Fane


1 Answers

As you initially assign this.data = Newtonsoft.Json.JsonConvert.SerializeObject(data);, suppose his.data has type string (you can change if it is otherwise).

Then instead of byte[] data_bytes = Encoding.ASCII.GetBytes(Convert.ToChar(data)[]); you need to write just byte[] data_bytes = Encoding.ASCII.GetBytes(data);

After use this

//{BEGIN DOUBT

        dataStream.Write(data_bytes, 0, data_bytes.Length);
        dataStream.Close();

It will help to do the call with some data but it does not help to solve your problem. request.ContentType = "application/x-www-form-urlencoded"; does not expect that the data is Newtonsoft.Json.JsonConvert.SerializeObject serialized. It expects a string containing & separated pairs that are urlencoded.

name1=value1&name2=value2&name3=value3

So, you need to use this format instead of JSON.

like image 131
Sergey L Avatar answered Dec 23 '25 12:12

Sergey L



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!