Signing into drupal website remotly using C#.net and json

◇◆丶佛笑我妖孽 提交于 2019-12-14 02:23:32

问题


I want to create a form in C#.net which can sign me in through a drupal website. Service 3.x module is enabled and Rest server is running on my website correctly. My only problem is how to serialize the username and password into json format?


回答1:


Finally a solution :

I've got a windows form , contains a textbox , a masked-textbox and a button (called button3 below) ,

on button click event , the textbox and maskedtextbox contents will placed in the user object which is constructed using this class :

class User
{
    public string username;
    public string password;
    public string name;
    public string number;
    public string address;
    public string email;

    public User(string user, string pass, string name = "", string number = "", string address = "", string email = "")
    {
        this.username = user;
        this.password = pass;
        this.name = name;
        this.number = number;
        this.address = address;
        this.email = email;
    }
}

then converted this object into json model using Json.net library

in the rest it makes a request the incoming cookie will store in cookieJar and for rest Requests you must copy this cookieContainer into your request cookieContainer and you will stay logged in. this is the rest of Code :

        private void button3_Click(object sender, EventArgs e)
    {
        CookieContainer cookieJar = new CookieContainer();
        User user = new User(textBox1.Text,maskedTextBox1.Text);
        string url = "http://"your-web-address"/"your-rest-service"/?q="your-resurce"/user/login.json";
        try
        {
            var request = (HttpWebRequest)WebRequest.Create(url);          
            request.ContentType = "application/json";
            request.Method = "POST";
            request.CookieContainer = cookieJar;

            using (var streamWriter = new StreamWriter(request.GetRequestStream()))
            {
                string query = JsonConvert.SerializeObject(user);

                streamWriter.Write(query);
                streamWriter.Flush();
                streamWriter.Close();
            }
            var response = (HttpWebResponse)request.GetResponse();
            using (var streamReader = new StreamReader(response.GetResponseStream()))
            {
                var responseText = streamReader.ReadToEnd();
            }

    //Check to see if you're logged in
            url = "http://web-address/rest-server/?q=resurce/system/connect.json";
            var newRequest = (HttpWebRequest)WebRequest.Create(url);
            newRequest.CookieContainer = cookieJar;
            newRequest.ContentType = "application/json";
            newRequest.Method = "POST";


            var newResponse = (HttpWebResponse)newRequest.GetResponse();
            using (var newStreamReader = new StreamReader(newResponse.GetResponseStream()))
            {
                var newResponseText = newStreamReader.ReadToEnd();
            }


        }
        catch(Exception ex)
        {
            MessageBox.Show(ex.ToString(), "Can't access server");
        }
    }

note: Second request is just to test if drupal knows me.




回答2:


Your question is quite ambiguos, but i could show you the method to log in.

To Log in into Drupal Site using services you can enable the user resource and the actions Log in ( and Logout ).

Use the following to log in, ( make changes according to your set-up).

URL
 - HOST: "http://www.yourserver.com" 
 - PATH: "/service-end-point/user/login"
METHOD 
 - POST CONTENT-TYPE: application/json 
BODY
 - RAW Input:
   { "username":"demo@gmail.com", "password":"demo" }


来源:https://stackoverflow.com/questions/16119127/signing-into-drupal-website-remotly-using-c-net-and-json

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!