tonybaldwin: tony baldwin (Default)
tonybaldwin ([personal profile] tonybaldwin) wrote2010-04-06 10:46 am

xmlrpc posting with Xpostulate

Okay...I've started to hack up the xmlrpc functions.
First, I had to replace all "<" and ">" in html tags in a post with"&lt;" and "&gt;",
and then, I have basically just handwritten out a relevant xml file.
Which looks like this:

<?xml version="1.0"?><methodCall><methodName>LJ.XMLRPC.postevent</methodName><params><param><value><struct><member><name>username</name><value><string>tonytraductor</string></value></member><member><name>password</name><value><string>XXXXXXXX</string></value></member><member><name>subject</name><value><string>xmlrpc posting</string></value></member><member><name>lineendings</name><value><string>pc</string><value></member><member><name>year</name><value><int>2010</int></value></member><member><name>mon</name><value><int>04</int></value></member><member><name>day</name><value><int>06</int></value></member><member><name>hour</name><value><int>10</int></value></member><member><name>min</name><value><int>46</int></value></member><member><name>prop_current_location</name><value><string>127.0.0.1</string></value></member><member><name>propr_current_mood</name><value><string>focused</string></value></member><member><name>prop_taglist</name><value><string>xmlrpc, xpostulate, wordpress, livejournal, dreamwidth, insanejournal</string></value></member><member><name>prop_currentmusic</name><value><string>none</string></value></member><member><name>userjournal</name><value><string>which journal?</string></value></member><member><name>event</name><value><string>Okay...I've started to hack up the xmlrpc functions.
First, I had to replace all "<" and ">" in html tags in a post with "&lt;" and "&gt;",
and then, I have basically just handwritten out a relevant xml file.


</string></value></member></struct></value></param></params></methodCall>


What I haven't done is tried to send such a file to a server, yet...
I'm not sure if the posting method has to be different from a flat post, in terms of simply sending this file as the post data...
More work...
But, hey, I'm working on it!
catness: (Default)

[personal profile] catness 2010-04-06 05:38 pm (UTC)(link)
Aren't there any low-level libraries in Tcl which convert array to xml-rpc data? Then you can use it in a more straightforward way, as xml-rpc is supposed to add convenience, not pain in the ass ;) For example, in C++ it goes something like that:

....params is an array (hash).......
params["username"] = username;
params["password"] = password;
....
.......props - another array......
props["current_mood"] = mood;
props["current_music"] = music;
params["props"] = props;
.......
and then just use the function which converts the array to proper xml-rpc data and sends to the server.
catness: (Default)

[personal profile] catness 2010-04-07 06:55 pm (UTC)(link)
Meanwhile, I dunno about the challenge but I've succeeded to post with cleartext password just fine, with the following script (though it's my first attempt on using tcl so I don't really know what I'm doing, lol). You can see the result at http://catness.insanejournal.com/204215.html
(the server returns the url among the result data)

#!/usr/bin/tclsh

package require http;

set url "http://www.insanejournal.com/interface/xmlrpc"

set password "MYPASSWORD"
set username "catness"

set post "<?xml version=\"1.0\"?>
<methodCall>
<methodName>LJ.XMLRPC.postevent</methodName>
<params>
<param>
<value><struct>
<member>
<name>day</name>
<value><int>7</int></value>
</member>
<member>
<name>event</name>
<value><string>This is a test. Please ignore.</string></value>
</member>
<member>
<name>hour</name>
<value><int>21</int></value>
</member>
<member>
<name>lineendings</name>
<value><string>unix</string></value>
</member>
<member>
<name>min</name>
<value><int>40</int></value>
</member>
<member>
<name>mon</name>
<value><int>4</int></value>
</member>
<member>
<name>props</name>
<value><struct>
<member>
<name>current_mood</name>
<value><string>awake</string></value>
</member>
<member>
<name>current_moodid</name>
<value><int>87</int></value>
</member>
<member>
<name>taglist</name>
<value><string>test</string></value>
</member>
<member>
<name>useragent</name>
<value><string>tcl</string></value>
</member>
</struct></value>
</member>
<member>
<name>security</name>
<value><string>public</string></value>
</member>
<member>
<name>subject</name>
<value><string>test, please ignore</string></value>
</member>
<member>
<name>username</name>
<value><string>$username</string></value>
</member>
<member>
<name>password</name>
<value><string>$password</string></value>
</member>
<member>
<name>ver</name>
<value><int>1</int></value>
</member>
<member>
<name>year</name>
<value><int>2010</int></value>
</member>
</struct></value>
</param>
</params>
</methodCall>"

puts $post

puts $url

set post_response [http::geturl $url -query $post -type "text/xml" ]

puts [http::data $post_response]
catness: (Default)

[personal profile] catness 2010-04-07 08:26 pm (UTC)(link)
And I fixed the challenge too (got curious - damn you ;) Here's the code which creates $response from $challenge and $password - note the "tolower" bit, cost me a couple of hours, doesn't work without it... all the rest is the same as in the previous example, except for using auth_challenge and auth_response, of course. The whole script is too long to post because it's using some xml processing function which I've found elsewhere, but I can send it if you need.

set encoded [string tolower [md5::md5 -hex $password] ]
set cat $challenge$encoded
set response [string tolower [md5::md5 -hex $cat] ]

This post starts to be difficult to navigate... ;)