I am trying to recreate some code written in C# using perl.  The goal is to 
create an XML formatted login packet and post it to http webserver and then 
parse the response.  My first hurdle I think is to create the XML login packet. 
 

Here is the sample of what the login packet is supposed to look like

<header>
</header>
<data>
<struct>
<var name='USERID'><string>john.doe</string></var>
<var name='USERPASSWORD'><string>FAKEPASSWD</string></var>
<var name='PARTNERID'><string>1</string></var>
<var name='HOMEURL'><string></string></var>
<var name='ERRORURL'><string></string></var>
</struct>
</data>

I have been looking for a perl module to help me create this and I think using 
XML::DOM may solve this need.

I have the following code so far which almost provides the first attribute and 
string value.

#!/usr/bin/perl

use strict;
use warnings;
use XML::DOM;

my $doc = XML::DOM::Document->new;
my $xml_pi = $doc->createXMLDecl ('1.0');
my $root = $doc->createElement('data');
my $body = $doc->createElement('struct');
$root->appendChild($body);

my $var = $doc->createElement('var');
$var->setAttribute('name', 'USERID');
$body->appendChild($var);

my $text = $doc->createTextNode('ghct.test');
$body->appendChild($text);

print $xml_pi->toString;
print $root->toString;
print "\n";

When I run this code I get back the following output.

<?xml version="1.0"?><data><struct><var name="USERID"/>john.doe</struct></data>

Note I am missing the <string> element.

Here is C# code used for this purpose.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.IO;
using System.Diagnostics;
using System.Xml;

namespace LoginSSOSample
{
    class Program
    {
        static void Main(string[] args)
        {

            string url = "https://example.com/external/login/autologin_xml.asp";;
            HttpWebRequest httpWReq = (HttpWebRequest)WebRequest.Create(url);
            ASCIIEncoding encoding = new ASCIIEncoding();
            XmlDocument xmlDoc = new XmlDocument();

            xmlDoc.LoadXml("<TST_LOGIN></TST_LOGIN>");

            var root = xmlDoc.DocumentElement;

            root.SetAttribute("USERID", "john.doe");
            root.SetAttribute("USERPASSWORD", "FAKEPASSWD");
            root.SetAttribute("USERAUTH", "Client");
            root.SetAttribute("PARTNERID", "1");            
            root.SetAttribute("ERRORURL", "");
            root.SetAttribute("HOMEURL", "");
            
            string postData = "TST_LOGIN=" +  
Uri.EscapeUriString(xmlDoc.OuterXml);
                        
            byte[] data = encoding.GetBytes(postData);

            httpWReq.Method = "POST";
            httpWReq.ContentType = "application/x-www-form-urlencoded";
            httpWReq.ContentLength = data.Length;

            using (Stream stream = httpWReq.GetRequestStream())
            {
                stream.Write(data, 0, data.Length);
            }

            HttpWebResponse response = (HttpWebResponse)httpWReq.GetResponse();

            string responseString = new 
StreamReader(response.GetResponseStream()).ReadToEnd();

            Debug.WriteLine(responseString);

            xmlDoc.LoadXml(responseString);

            root = xmlDoc.DocumentElement;

            string rurl = root.GetAttribute("REDIRECTURL");

            Process.Start(rurl);
            
        }


        static byte[] GetBytes(string str)
        {
            byte[] bytes = new byte[str.Length * sizeof(char)];
            System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, 
bytes.Length);
            return bytes;
        }       

    }
}

thanks in advance for any assistance you may be able to provide.


--
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/


Reply via email to