ling 408/508: computational techniques for...

20
LING 408/508: Computational Techniques for Linguists Lecture 21

Upload: others

Post on 04-Jan-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

LING 408/508: Computational Techniques for Linguists

Lecture 21

Administrivia

• Both Homework 7 and 8 have been graded• Homework 9 today

Example: example.cgiSiteSites$ ./example.cgiContent-Type: text/html; charset=utf-8

<html><head></head><body><h1>~sandiway/Sites/example.cgi</h1><p>Now: Tue Oct 30 20:37:01 MST 2018</p><p>User: sandiway</p><script src="canvasjs.min.js"></script><div id="cc" style="height: 400px; max-width: 600px; margin: 0px auto;"></div><script> window.onload = function() {var chart = new CanvasJS.Chart("cc", {animationEnabled: true, title: { text: "Disk Space: 1908108MB" },data: [{ type: "pie", startAngle: 240,yValueFormatString: "##0.00'%'", indexLabel: "{label} {y}",dataPoints: [{y: 626807/1908108*100, label: "Used", color: "Bisque"},{y: 1279477/1908108*100, label: "Unused", color: "Tan"}]}]}); chart.render(); } </script></body></html>

Example: example.cgi$2 $3 $4

Example: example.cgi

• Used the free(?) canvasjs.min.jslibrary from www.canvasjs.com• They have source code for many

examples of javascript charts.• Wondering what happens after

30 days…

Today's Topics

• Sending form data to the webserver using:1. GET method2. POST method

• There are also (many) other methods to communicate information depending on the kind of webserver we run:• e.g. Apache Tomcat (for Java)• e.g. WebSocket interface (for bidirectional data passing)• etc.

Sending information using GET

• HTML form:1. <form action="http://localhost/cgi-bin/get.cgi" method="GET"> 2. First: <input type="text" name="first" size=12>3. Last: <input type="text" name="last" size=12>4. <input type="submit">5. </form>

• Information encoded using alphanumeric characters: why?• URLs are restricted to alphanumeric characters only• bash accesses the URL-encoded string via the environment variable QUERY_STRING

http://localhost/cgi-bin/get.cgi?first=Sandiway&last=Fong

Sending information using GET• get.cgi:1. #!/bin/bash2. echo "Content-Type: text/plain"3. echo4. #echo $QUERY_STRING5. origIFS=$IFS6. IFS='=&'7. set -- $QUERY_STRING8. IFS=$origIFS9. echo "1:<$1> 2:<$2> 3:<$3> 4:<$4>"

In bash:• IFS = internal field separator (for arguments)• default: space newline tab• set -- String• -- option: positional parameters $1,$2,..etc. are set after splitting String

http://localhost/cgi-bin/get.cgi?first=Sandiway&last=Fong

= and &

Sending information using GET

• get.cgi:#!/bin/bashecho "Content-Type: text/plain"echo#echo $QUERY_STRINGorigIFS=$IFSIFS='=&'set -- $QUERY_STRINGIFS=$origIFSecho "1:<$1> 2:<$2> 3:<$3> 4:<$4>"

Sending information using GET

OS X• /Library/WebServer/CGI-Executables/• $ls -l get.cgi• -rwxr-xr-x 1 root wheel 161 Oct 16 2014 get.cgi• sudo chmod 755 get.cgi

Ubuntu /usr/lib/cgi-bin/

Sending information using POST

Sending information using POST

•HTML form:1. <form action="http://localhost/cgi-bin/read.cgi" method="POST"> 2. First: <input type="text" name="first" size=12>3. Last: <input type="text" name="last" size=12>4. <input type="submit">5. </form>

• bash accesses the URL-encoded string on standard input via read• cf. GET using QUERY_STRING

Sending information using POST• bash accesses the URL-encoded string on standard input via read• read.cgi:1.#!/bin/bash2.echo "Content-Type: text/plain"3.echo4.read input5.origIFS=$IFS6.IFS='=&'7.set -- $input8.IFS=$origIFS9.echo "<$2><$4>"

Sending information using POST

• read.cgi:1. #!/bin/bash2. echo "Content-Type: text/plain"3. echo4. read input5. origIFS=$IFS6. IFS='=&'7. set -- $input8. IFS=$origIFS9. echo "<$2><$4>"

Client-side code: Server-side code:

Limitations of positional parameters

• set values:origIFS=$IFSIFS='=&'set -- $QUERY_STRINGIFS=$origIFSecho "1:<$1> 2:<$2> 3:<$3> 4:<$4>"

Files and Locations

Server cgi-bin directory:• MacOS: /Library/WebServer/CGI-Executables• Ubuntu: /usr/lib/cgi-binWebserver logs:• MacOS: /var/log/apache2/error_log• Ubuntu: /var/log/apache2/error.logCourse webpage:• form-get.html• form-post.html• get.cgi (needs 755 permissions)• read.cgi (needs 755 permissions)

Error Log

Example:

…[Wed Oct 31 22:08:01.555932 2018] [cgi:error] [pid 4600] [client ::1:51340] AH01215: (13)Permission denied: exec of '/Users/sandiway/Sites/get2.cgi' failed: /Users/sandiway/Sites/get2.cgi[Wed Oct 31 22:08:01.556059 2018] [cgi:error] [pid 4600] [client ::1:51340] End of script output before headers: get2.cgi

error log:

Homework 9

• Use the cgi-bin methods to implement a BMI bash shell script onthe webserver.• i.e. you should modify your BMI program to accept data from a html form and

compute the value on the server side

• Use both GET and POST methods to communicate the weight, height and units.• Submit your .html and .cgi files• Submit screenshots to show it working in both cases• Due next Monday by midnight

Example: adding names to a server list

Normally, you'd set up database software,e.g. mysql, on the webserver

Example: adding names to a server listClient-side code: addnames.htmlServer-side code: get2.cgi

Data file:touch names-list.txtchmod a+w names-list.txt