Assigned: Tuesday, March 26, 2013
Due: Tuesday, April 9, 2013 by 11:59pm
The goal of this assignment is to allow you to demonstrate your knowledge of HTTP requests and HTTP responses. We'll be implementing an HTTP request capture program so that you can look at requests generated by your favorite web browser and a simple HTTP client so that you can build valid HTTP requests and process HTTP responses from real web servers.
Note: The two programs that you are writing (HTTP Request Capture and HTTP Client) are totally independent.
Use your HTTP Request Capture program with a web browser. Setup your capture program as a server on a CS Unix machine (use either atria or sirius). Use the hostname and port where you are running your capture program in the URL you type in your browser. For example, if you are running your capture program on atria port 10010, use something like http://atria:10010/my/url/ or http://atria.cs.odu.edu:10010/. The path doesn't matter because your capture program is not actually serving pages. There is no need to change any proxy settings on your browser.
HTTPReqCap.java.
ERR - arg x, where x is the argument number.
128.82.4.98:63307
http://atria.cs.odu.edu:10500/my/url/
firefox &' from any of the CS Unix machines if you're working on this from home and need to test (make sure that you have X-Win32 or another XWindows server running at home first).
Hints:
readLine() in Java strips off newline characters before returning a String.
equals() method in Java to compare two Strings.
Use the HTTP client to request data from a web server. Your client should be able to send requests and receive responses from any web server on the Internet. There is no need to write a server program to communicate with this client.
HTTPClient.java.
http://hostname[:port][/path] (only lowercase letters will be used)
ERR - arg x, where x is the argument number.
http://
HEAD method so that only the HTTP response header will be returned.
A large part of your program's grade will be determined by how well it handles a set of inputs. You should test your program rigorously before submitting. Because your programs will be run and tested using a script, you must format your output exactly as I have described or you will lose points.
The examples below are just examples. I will test your programs rigorously. In particular, I will test your HTTP Client on a wide range of URLs.
Example 1
java HTTPReqCap Usage: java HTTPReqCap port
Example 2
atria> java HTTPReqCap 10003 128.82.4.118:33083 GET /my/url HTTP/1.1 Host: atria.cs.odu.edu:10003 User-Agent: Mozilla/5.0 (X11; U; SunOS sun4u; en-US; rv:1.7) Gecko/20070606 Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive
Note that after setting up the server, the user opened a web browser to the URL http://atria.cs.odu.edu:10003/my/url
Example 3
java HTTPClient Usage: java HTTPClient URL
Example 4
java HTTPClient http://www.cs.odu.edu/~mweigle/files/foo.txt HEAD /~mweigle/files/foo.txt HTTP/1.0 Host: www.cs.odu.edu User-agent: ODU-CS455/555 200 Apache/2.2.17 (Unix) PHP/5.3.5 mod_ssl/2.2.17 OpenSSL/0.9.8q Thu, 19 May 2011 19:23:43 GMT 92 HTTP/1.1 200 OK Date: Thu, 21 Mar 2013 20:53:29 GMT Server: Apache/2.2.17 (Unix) PHP/5.3.5 mod_ssl/2.2.17 OpenSSL/0.9.8q Last-Modified: Thu, 19 May 2011 19:23:43 GMT ETag: "5c-4a3a5f178cdd0" Accept-Ranges: bytes Content-Length: 92 Connection: close Content-Type: text/plain
Example updated to include final CRLF after HTTP response. -MCW 3/31/13
You must name your source files HTTPReqCap.java and HTTPClient.java or HTTPReqCap.py and HTTPClient.py (note the capitalization). Make sure that you submit all files necessary to compile your program. But, do not submit compiled files (.class files). Do not submit compressed (.zip) files.
Directions for submitting your assignment through Blackboard