[Mailman-Users] Administrate list via HTML?

Richard Barrett r.barrett at openinfo.co.uk
Tue May 4 16:56:47 CEST 2004


On 3 May 2004, at 21:57, Sean Robertson wrote:

> I need to be able to send the commands from a PHP script.  There is no
> way that I know of to handle the login and execute commends on the HTML
> pages from a PHP script.

If you are absolutely bound and determined to use PHP for doing your 
list admin via the Mailman admin web GUI and the standard Mailman web 
GUI cannot meet your needs then you can drive the standard Mailman 
admin GUI by screen scraping. You could certainly do it with Python and 
I see no in-principle reason why you cannot do it with PHP. A quick web 
search threw up the CURL client support library for use with PHP which, 
at first glance, looks like it may be man enough for the job:

http://ca.php.net/manual/en/ref.curl.php

Mailman's web GUI uses cookie authentication and your code has to 
understand how to do that but it is not rocket science.

The main issue is being able to extract Set-cookie: headers from 
responses and add Cookie: headers to requests.

As an example, the crude Python code fragment below will login to a 
Mailman web GUI and extract a list's basic membership admin HTML page.

But be aware of how vulnerable your PHP code is going to be to changes 
in the Mailman interface, even if it is extremely well thought out. But 
this is true of all screen scrapers.

Python code fragment follows
----------------------------

import httplib
import urllib
# hardwired list admin password - awful security
parms = urllib.urlencode({'adminpw': 'yourpassword', 'admlogin': 'Let 
me in...'})
hdrs = {"Content-type": "application/x-www-form-urlencoded", "Accept": 
"text/html"}
conn =  httplib.HTTPConnection('server.yourdomain.com:80')
# This request should 'log us in' and get Mailman to return the 
authentication
# cookie with the list's general options page
conn.request('POST', '/mailman/admin/listname', parms, hdrs)
resp = conn.getresponse()
print resp.status, resp.reason # should be 200 and OK
data = resp.read()
# data now contains the HTML of the list's General options page
conn.close()
# Get the cookie set by Mailman
scookie = resp.getheader('set-cookie')
# Extract the cookie value to return with next request
cookie = scookie.split(';')[0].strip()
nhdrs = {"Accept": "text/html", 'Cookie': cookie}
conn =  httplib.HTTPConnection('server.yourdomain.com:80')
# Now get the Membership list page for the list
conn.request('GET', '/mailman/admin/listname/members', None, nhdrs)
resp = conn.getresponse()
print resp.status, resp.reason # should be 200 and OK
data = resp.read()
# data now contains the HTML of the list's Membership List page
conn.close()
...
and so on
...






More information about the Mailman-Users mailing list