This post is about using other languages apart from BeanShell and PHP.
PAW includes a CGI Handler to execute scripts by using the Common Gateway Protocol (CGI).
This handler is also used by the PHP plugin to call the CGI version of PHP.
The handler is defined inside the file
PAW_HOME/conf/handler.XML. Instead of using PHP we will use Perl to create a simple web page.
Finding the Executable Path
First thing to do is to install the SL4A and Perl APK from the
Android Scripting Project:
http://code.google.com/p/android-scripting/downloads/list
After installing the APKs and extracting Perl it's time to find out where the Perl executable is located.
One way to do it is to execute the Perl interpreter and to use a terminal emulator and run the
ps command.
In the case of Perl the executable is located here:
/data/data/com.googlecode.perlforandroid/files/perl/perl
CGI Configuration
Now it's time to edit the PAW handler configuration.
Open the file
PAW_HOME/conf/handler.XML and add the following lines below the
Basic Auth Handler configuration:
<handler status="active">
<name>Perl CGI Handler</name>
<description>Perl CGI Handler</description>
<removable>true</removable>
<id>perlCgiHandler</id>
<files />
<params>
<param name="perlCgiHandler.class" value="org.paw.handler.AndroidCgiHandler" />
<param name="perlCgiHandler.root" value="[PAW_HOME]/html" />
<param name="perlCgiHandler.suffix" value=".pl" />
<param name="perlCgiHandler.runwith" value="/data/data/com.googlecode.perlforandroid/files/perl/perl" />
<param name="perlCgiHandler.sl4a" value="true" />
<param name="perlCgiHandler.ENV_TMPDIR" value="[PAW_HOME]/tmp" />
</params>
</handler>
Let's have a look at the parameters.
The
class parameter defines the handler to use. In our case this is the CGI Handler. The next parameter is the
root parameter which specifies the directory the scripts are located. Subdirectories are also included.
The
suffix parameter defines the filename extension for the scripts. The
runwith parameter is the most important one, it defines the location of the CGI binary.
If the
sl4a is set to
true the environment variables
AP_HOST and
AP_PORT are set. Because this information is read from logcat entries, SL4A should be started right before the startup of PAW. Otherwise it might not possible for the handler to extract the SL4A configuration.
The last parameter sets the
TMPDIR environment variable. All parameters starting with
ENV_ are used to set environment variables.
Now the PAW configuration is complete and we can start to write a test CGI script.
The CGI Script
We will create a test CGI script inside the
PAW_HOME/html directory called
test.pl.
The test script looks like this:
print "Content-type: text/html\n\n";
print "Hello world!\n";
After starting PAW and entering the URL
http://<ip-address>:8080/test.pl into the address bar of the browser the following text should be displayed:
Hello world!
Conclusion
The Android Scripting Project offers many more interpreters. It should be possible use many of them together with PAW, as long as you can get them to work from the command line.
Hello,
ReplyDeleteCongratulations for this app and work. I had SL4A and perl already installed in my phone, and I followed these steps and got perl scripts working on paw server!
The only problem is with forms: I can't send any variable via post or get method, the enviromental variable "QUERY_STRING" is always empty, and I can't use libraries as CGI, any suggestion to do this?
By the way, I have tried a sample perl script provided by SL4A using android library and it works under SL4A but not from Paw Server, could it be a problem about permissions??
Thank you very much
The QUERY_STRING works for me. Just checked.
DeleteStrange that it isn't working for you.
Is there a way of having sql lite?
ReplyDeleteNot out if the box, but if you manage to compile the CPAN module this should work.
DeleteI haven't tried, I don't use Perl much.
QUERY_STRING is working if I write the complete URL, like localhost?var=1
ReplyDeleteBut if I send a form with get method the variable is blank, have you tried this?
And would have been there any way to receive with post method?
Hello friends,
ReplyDeleteIt works with native CGI? (executable compiled in C++)
Thanks,
--
Silvio Clécio
My public projects - github.com/silvioprog
Hi!
ReplyDeleteIs possible to edit default 404 error page?
Thanks!
Hi,
Deletetechnically that should be possible, but that's not implemented. I don't think that I have the time to implement that anytime soon.
Actually you could do that yourself, but there is some internal knowledge necessary, that you don't have.
I'll put that on my todo list.
Hi
ReplyDeleteI place perl cgi scripts in html folder but its not executing it.
You can try to turn on debugging and see if the perlCgiHandler is used.
Delete