?
Solved

Receiving an XML Post and emailing all variables posted..

Posted on 2005-04-14
22
Medium Priority
?
263 Views
Last Modified: 2013-12-25
Hi there,

I am currently coding a system that is basically a perl script, that converts an mms message into database fields, and writes the picture file that is sent (all via XML).

I currently have the script emailing me all posted form variables (which would work if it was standard form variables) except with the XML formatting, its just treating it as 1 variable, and I have no way of splitting up each name/value pair.

I have seen XML::Simple, so Im guessing I need a script that basically when called, just goes through and prints all XML variables posted to it.

Is this easy enough to do?

An example of the posting that is sent, is below:

www.theshow.com/Example.txt 


The current script I use just to post out all variables is below, but this treats it as just 1 variable when XML is posted.

@names = $q->param;
foreach $varname (@names)
{ $$varname = $q->param($varname);
$output.="$varname:- ";
$output.= $q->param($varname);
$output.="<BR><BR>\n";
}
0
Comment
Question by:dreamshockDesign
  • 11
  • 7
19 Comments
 
LVL 18

Expert Comment

by:kandura
ID: 13780182
use XML::Simple;
use Data::Dumper;

$h = XMLin(\*DATA);

print Dumper($h); # this shows you the data structure that XML::Simple creates

my %fields = %{$h->{field}};

foreach(sort keys %fields) {
    print "$_: $fields{$_}->{content}\n";
}

__DATA__
<?xml version="1.0"?>
<!DOCTYPE bspostevent PUBLIC "-//BSPostEvent//DTD bspostevent 1.1.0//EN" "http://mbrand1.ukmain.brainstorm.co.uk/MEnable/Client/Extra/bspostevent-1_0_0.dtd">
<bspostevent>
  <field name="RemoteNetwork" type = "string">vodafone</field>
  <field name="LastName" type = "string"></field>
  <field name="BSDate-tomorrow" type = "string">20040619</field>
  <field name="Shared" type = "string">N</field>
  <field name="EMail" type = "string"></field>
  <field name="BSDate-today" type = "string">20040618</field>
  <field name="Local" type = "string">+447719336699</field>
  <field name="FirstName" type = "string"></field>
  <field name="PassCode" type = "string"></field>
  <field name="MessageID" type = "string">3275751</field>
  <field name="Gender" type = "string"></field>
  <field name="Prefix" type = "string">APICHECK</field>
  <field name="ClientName" type = "string">Demo</field>
  <field name="RegDate" type = "date">2003-10-28 20:54:30 +0000</field>
  <field name="MobileDevice" type = "string">Sharp GX10</field>
  <field name="BSDate-yesterday" type = "string">20040617</field>
  <field name="Remote" type = "string">+447796170669</field>
  <field name="PostCode" type = "string"></field>
  <field name="MobileNetwork" type = "string">vodafone</field>
  <field name="MMS" type = "data">TUlNRS1WZXJzaW9uOiAxLjANClN1YmplY3Q6IA0KRnJvbTogKzQ0Nzc5NjE3MDY2OQ0KVG86ICs0NDc3MTkzMzY2OTkNCk14dGVsZWNvbS1JZDogMTU4ODE5NjQNCkRhdGU6IDIwMDQtMDYtMTggMjE6Mjg6MTMNCkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJpbmFyeQ0KQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvcmVsYXRlZDsgYm91bmRhcnk9IkYzWC9rdXBvMytTM3ZySVlubmtzTVFBQUFBTT0iOyBzdGFydD0iPG1tcy5zbWlsPiI7IHR5cGU9ImFwcGxpY2F0aW9uL3NtaWwiDQoNCi0tRjNYL2t1cG8zK1MzdnJJWW5ua3NNUUFBQUFNPQ0KQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9zbWlsOyBuYW1lPW1tcy5zbWlsDQpDb250ZW50LUlkOiA8bW1zLnNtaWw+DQpDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0DQoNCjxzbWlsPg0KIDxib2R5Pg0KICA8cGFyIGR1cj0iNXMiPg0KICAgPHJlZiBzcmM9InQwIiAvPg0KICA8L3Bhcj4NCiAgPHBhciBkdXI9IjVzIj4NCiAgIDx0ZXh0IHNyYz0idDElM0F0MS50eHQiIC8+DQogIDwvcGFyPg0KICA8cGFyIGR1cj0iNXMiPg0KICAgPGltZyBzcmM9ImkxJTNBVGVpZmkuanBnIiAvPg0KICA8L3Bhcj4NCiA8L2JvZHk+DQo8L3NtaWw+DQoNCi0tRjNYL2t1cG8zK1MzdnJJWW5ua3NNUUFBQUFNPQ0KQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9zbWlsOyBuYW1lPXQwDQpDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiaW5hcnkNCkNvbnRlbnQtSWQ6IDx0MD4NCg0KPHNtaWw+DQogPGhlYWQ+DQogIDxsYXlvdXQ+DQogICA8cm9vdC1sYXlvdXQgaGVpZ2h0PSIxMjciIHdpZHRoPSIxMTEiLz4NCiAgIDxyZWdpb24gaWQ9IkltYWdlIiB0b3A9IjUwJSIgbGVmdD0iMCUiIGhlaWdodD0iNTAlIiB3aWR0aD0iMTAwJSIvPg0KICAgPHJl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</field>
  <field name="State" type = "string">1</field>
  <field name="MobileNumber" type = "string">+447796170669</field>
  <field name="Text" type = "string"></field>
  <field name="RegType" type = "string">SMS</field>
  <field name="NewSubscriber" type = "string">NO</field>
  <field name="PostID" type = "real">0
  </field>
  <field name="Subscriber" type = "string">+447796170669</field>
  <field name="Parsed" type = "string"></field>
  <field name="ServiceName" type = "string">ShowAPI3</field>
  <field name="BSDate-thisweek" type = "string">20040614</field>
  <field name="Now" type = "date">2004-06-18 20:28:07 +0000
  </field>
</bspostevent>

0
 

Author Comment

by:dreamshockDesign
ID: 13780774
Thanks for the reply, but I get the following error each time the script is called? does this make any sence to you?

 Error reading from filehandle: Bad file descriptor

Is this because of the way its being posted from another server?
0
 
LVL 18

Expert Comment

by:kandura
ID: 13780820
Did you also include the __DATA__ section?
If you didn't, then XMLin(\*DATA) would indeed give you that error.

Try XMLin($filename) instead, if you have the xml in a file named $filename.

I'm sorry about posting that big chunk of encoded data, by the way. I didn't notice in my editor that it was so large!
0
Important Lessons on Recovering from Petya

In their most recent webinar, Skyport Systems explores ways to isolate and protect critical databases to keep the core of your company safe from harm.

 

Author Comment

by:dreamshockDesign
ID: 13781109
Hey thats ok! not a problem........

But the xml isnt ever a physical file, its simply posted from one server to another, therefore I cant specify a file name, i need to somehow call it from the "posted in" information, I assume this is also quite simple based on the above?
0
 
LVL 18

Expert Comment

by:kandura
ID: 13781162
this should also work fine:

   $h = XMLin($q->param('posted in'));

Provided the cgi parameter is called 'posted in', of course.
0
 

Author Comment

by:dreamshockDesign
ID: 13781779
This is obviously harder than I thought it was going to be!!

Its now erroring and saying the statement below:

Could not find acceptmms.xml in ./ at acceptmms.pl line 13

So its looking for an actual file for some reason, rather than just reading the input.

What about maybe writing the contents to a .xml file first, then parsing it.

The trouble is I dont know how to harness this datacorrectly, to even write it to a file....... hmmm, im puzzled now....
0
 
LVL 18

Expert Comment

by:kandura
ID: 13781867
how is it posted to you exactly? do you get the actual xml content, or just a url?

if it's the real content, then:

    my $xml = $q->param('xmldata');
    my $h   = XMLin($xml);

should work: that is, we supply the xml content to XML::Simple as a string.



0
 

Author Comment

by:dreamshockDesign
ID: 13782095
Its the xml content itself

To quote:

The incoming message is an MMS that's too big for a URL line so we must send it as XML in bspost format as defined in the attached document www.theshow.com/bspostevent-1_0_0.dtd


Tried, but again it is simply saying it cannot find the .xml file, however I have tried doing it with a physical file that resides on the server, and it works flawlessly. So its just getting it to read the posted data!
0
 
LVL 18

Expert Comment

by:kandura
ID: 13782197
Í'm pretty sure XML::Simple didn't just make up that file name of "acceptmms.xml". Are you sure you're using the correct parameter name?
Could you just send me the output from your original script?
0
 

Author Comment

by:dreamshockDesign
ID: 13782653
The perl script is called acceptmms.pl, so obviously thats where the name is coming from.

This is what I get when I run the script from the command, or when the 3rd party posts the xml feed:


> perl acceptmms.pl
Content-type: text/html

Could not find acceptmms.xml in ./ at acceptmms.pl line 14


Where line 14 is:

$h   = XMLin($xml);

Therefore I think it has to be something to do with the line above:

$xml = $q->param('xmldata');
0
 
LVL 18

Expert Comment

by:kandura
ID: 13782721
dreamshockDesign,
> $xml = $q->param('xmldata');

the 'xmldata' is a name I made up. You should replace it with the actual name.
If that param doesn't contain any data, then I suppose XMLin tries to figure out a sensible file name to look for. The fact that it bases it on your script name does make sense, since XML::Simple is often used for configuration files.

How exactly is the XML posted to your script? Could you just do a dump of the POST request?
0
 

Author Comment

by:dreamshockDesign
ID: 13782904
Well the tricky part of this whole situation is that the post request comes from a 3rd party which I have no control over. As said initially I tried to do a script that simply emailed "everything" that was posted, but the variable names were lost, and its just came back as a long string of text split by spaces, so not very convenient to use.

An example of the code i was using initally was the following:

www.theshow.com/scott.txt

The email that was then sent out to me was the following:

www.theshow.com/scottoutput.txt

I suppose it would be possible to split via "a space" however the number of posted fields I think varies.

Thanks again for your help so far
0
 
LVL 18

Expert Comment

by:kandura
ID: 13783111
I suspect they send you just the raw unencoded xml. CGI is not going to be able to help us much here, so I'm afraid we have to do it ourselves.

Let's try this:

    #!/usr/bin/perl
    use strict;
    use warnings;
    use XML::Simple;
    use Data::Dumper;

    print "Content-type: text/html\n\n";

    if($ENV{REQUEST_METHOD} eq 'POST') {
        my $buf;
        my $xml = '';

        ## read post data
        while( read(STDIN, $buf, 1024) ) {
            $xml .= $buf;
        }
       
        ## we may need to urldecode $xml here, but I can't tell
        # $xml =~ s/%([0-9a-fA-F]{2})/chr($1)/eg;

        my $mms = XMLin($xml);

        print "<pre>";

        print Dumper($mms); # this shows you the data structure that XML::Simple creates
       
        my %fields = %{$mms->{field}};
       
        foreach(sort keys %fields) {
            print "$_: $fields{$_}->{content}\n";
        }

        exit;
    }

    print "No data received";
0
 
LVL 16

Expert Comment

by:manav_mathur
ID: 13783897
<quote>
Í'm pretty sure XML::Simple didn't just make up that file name of "acceptmms.xml".
</quote>

It does, when there is no argument to XMLin(), ir tries to search a file called scriptname.xml where scriptname.pl is the name of the script from which SMLin() is being called.
0
 
LVL 18

Expert Comment

by:kandura
ID: 13784506
manav_mathur,
> It does, when there is no argument to XMLin()

right! and I was still under the impression we *were* giving it an argument. but since it did make up that filename, I came to the conclusion that they're posting the raw xml without a named parameter.
Can you also take a look at how i did the post data reading? i admit to quickly writing that down without giving it much thought.
And do you know if there's a way to force CGI to give us the entire POST data? I have never been able to find that out.
0
 
LVL 18

Expert Comment

by:kandura
ID: 13785685
just posting a quick note: there has to be a terminating condition in the while(read...) loop to avoid reading too much data into memory.
something like this, maybe:

    my $read = 0;
    while( my $r = read(STDIN, $buf, 1024) > 0 ) {
        $xml .= $buf;
        last if $read+=$r > 1_024_000;      # don't read more than a megabyte
    }
0
 
LVL 18

Expert Comment

by:kandura
ID: 13820990
dreamshockDesign,

any progress on this?
0
 

Author Comment

by:dreamshockDesign
ID: 13831412
Sorry for the delay in replying (please, call me Scott, easier to type!)

I have been trying to get this going with no real avail what so ever.

With the above script, it just wouldnt mail out anything. So what i done was revert back to using the following script, which outputs the data as one long string,
then I was going to split into spaces and grab the data out that way. Then I hit a snag, the MMS data field that contains the image data, also had spaces in and
therefore screws up my ability to process the form this way.

@names = $q->param;
foreach $varname (@names)
{ $$varname = $q->param($varname);
$output.="$$varname ";
}

kandura, do you have a messenger account? mine is scott@dreamshock.com, it would be good to talk!
0
 
LVL 18

Accepted Solution

by:
kandura earned 2000 total points
ID: 13834547
Hi Scott,

I've tested the script below, and it works for me. I've added (but not tested) your sendmail code. Let me know how it goes.
   
    #!/usr/bin/perl
    use strict;
    use warnings;
    use XML::Simple;
    use Data::Dumper;
   
    print "Content-type: text/html\n\n";
   
    if($ENV{REQUEST_METHOD} eq 'POST') {
        my $buf;
        my $xml = '';
   
        ## read post data
        my $read = 0;
        while( my $r = read(STDIN, $buf, 1024) > 0 ) {
            $xml .= $buf;
            $read+=$r > 1_024_000 and die "POST data exceeds maximum size";      # don't read more than a megabyte
        }
   
        ## we may need to urldecode $xml here, but I can't tell
        # $xml =~ s/%([0-9a-fA-F]{2})/chr($1)/eg;
   
        my $mms = XMLin($xml);
   
        print "<pre>";
   
        my %fields = %{$mms->{field}};
        my $output;
        foreach(sort keys %fields) {
            $output .= print "$_: $fields{$_}->{content}\n" if $fields{$_}->{content};
        }
   
        sendmail($output);
        exit;
    }
   
    print "No data received";
   
    sub sendmail {
        my $output = shift;
        my $mailtype = qq~Content-Type: text/html; charset="iso-8859-1"~;
   
        my $mail='scott@dreamshock.com';            #Write your mail here.
        my $mailprog='/usr/sbin/sendmail';        #Change this to your sendmail path.
   
        my $fullName = 'Kandura';
        my $email    = 'ee@rhesa.com';
       
        open (MAIL, "|$mailprog -t")or die ("wrong mailprog\n");
        print MAIL "To: $mail\n";
        print MAIL "From: $fullName<$email>\n";
        print MAIL "$mailtype\n";
        print MAIL "Subject: MMS Message\n";
   
    print MAIL <<ENDCONTENT;
    This is the output:
   
   
    $output
   
    ENDCONTENT
   
        print MAIL "\n\n";
   
        close (MAIL);
   
    print "done";
   
    }
0

Featured Post

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Active Directory replication delay is the cause to many problems.  Here is a super easy script to force Active Directory replication to all sites with by using an elevated PowerShell command prompt, and a tool to verify your changes.
The Windows functions GetTickCount and timeGetTime retrieve the number of milliseconds since the system was started. However, the value is stored in a DWORD, which means that it wraps around to zero every 49.7 days. This article shows how to solve t…
This tutorial will teach you the core code needed to finalize the addition of a watermark to your image. The viewer will use a small PHP class to learn and create a watermark.
The viewer will learn how to create a basic form using some HTML5 and PHP for later processing. Set up your basic HTML file. Open your form tag and set the method and action attributes.: (CODE) Set up your first few inputs one for the name and …
Suggested Courses
Course of the Month16 days, 21 hours left to enroll

864 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question