- Everything You Need To Know about TCP/IP but Failed to Learn in Kindergarten
- A Client Socket in Java
- Sending Email by Java
- A Server Socket in Java
- HTTP and Web Browsing: Retrieving HTTP Pages
- How to Make an Applet Write a File on the Server
- A Multithreaded HTTP Server
- A Mapped I/O HTTP Server
- Further Reading
- Exercises
- Some Light Relief—Using Java to Stuff an Online Poll
Some Light ReliefUsing Java to Stuff an Online Poll
The email to me was brief. It just read:
From billg@Central Mon May 4 11:57:41 PDT Subject: Hank the Angry Dwarf To: jokes@Sun.COM Hey everyone. If you've got five seconds to spare, go to the following url: http://www.pathfinder.com/people/50most/1998/vote/index.html and vote for: Hank the Angry, Drunken Dwarf This is a huge joke. We want to try to get Hank way up there on the People Magazine 50 most beautiful people of the year list. As of 2:00AM, he's already up to number 5!
Well, I can recognize a high priority when I see one. I put down the critical bug fix I was working on, went right to the website, and checked what this was all about.
Every year the celebrity gossip magazine People prints a list of "the 50 most beautiful people in the world," and this year they were soliciting votes on their web site. People had started the ball rolling with nominations for actors like Kate Winslet and Leonardo DiCaprio, who were in the public eye because of their roles in the Titanic movie.
People magazine gave web surfers the opportunity to write in names of people for whom they wanted to vote. A fan of the Howard Stern radio show nominated "Hank the angry, drunken dwarf" for People's list. When Stern heard about Hank's nomination as one of the most beautiful people in the world, he started plugging the candidacy on the radio. A similar phenomenon took place on the Internet, and many people received email like I did. Another write-in stealth candidate widely favored by netizens was flamboyant, blond-haired, veteran pro-wrestler Ric Flair.
Hank, the angry, drunken dwarf, is an occasional guest on Stern's syndicated radio program. Hank is a 36-year old dwarf who lives in Boston with his mother and has made a name for himself as a belligerent, if diminutive, devotee of beer, tequila, and Pamela Anderson.
The People website soon crashed under the strain of incoming votes for Hank. When the People poll closed, the results were as follows:
230,169 votes |
Hank the dwarf |
Angry, drunken dwarf and Stern radio guest |
17,145 votes |
Ric Flair |
25-year pro-wrestling performer |
14,471 votes |
Leonardo DiCaprio |
High school dropout |
7,057 votes |
Gillian Anderson |
Actress |
5,941 votes |
Kate Winslet |
High school dropout |
Hank Nassif, the angry, drunken dwarf, was officially the most beautiful person in the world, by a margin of more than 10-to-1 over the runner-up! Unhappily, People magazine showed their true colors at this point, ignored the clear mandate from the website, and went ahead with a cover story naming the guy who came in third as the official "most beautiful person in the world" for 1998. What a rip-off.
The Java Votebot
There were dark allegations here of automated voting programs, or votebots. I was shocked. But not too shocked to show you how to write a votebot using your new-found Java networking skills.
First, find any online poll. Lots of sites run them because they are a lot cheaper than having actual meaningful content. Let's pick on, I don't know, say, CNN.com. The goofballs in the media are always running some kind of "scientific" poll in an attempt to seem "with it" and "hip" to the latest trends and "cool slang." In October 2001, they were running a poll asking, "Is al Qaeda sending coded messages to followers via video statements?" You could answer "yes" or "no." There wasn't a box for people to respond, "This kind of inane question only trivializes serious matters, and distracts attention from the real issues".
Do a "view source" on a poll web page in your browser to see how they are submitting the results. You're probably going to want to reread the chapter on servlets to get the most out of this. The part of the HTML page that deals with the poll will probably look something like this:
<FORM METHOD=POST ACTION="http://poll.cnn.com/poll?1682781" TARGET="popuppoll"> <INPUT TYPE=HIDDEN NAME="Poll" VALUE="168278"> <!-- Question 1 --><INPUT TYPE=HIDDEN NAME="Question" VALUE="1"> <SPAN class="BoxStory"> Is al Qaeda sending coded messages to followers via video statements? <BR><BR></SPAN> </TD> </TR> <!-- Answer 1 --> <TR> <TD> <SPAN class="BoxStory"> Yes </SPAN> </TD> <TD align=center><INPUT TYPE=RADIO NAME="Answer168279" VALUE=1> </TD> </TR> <!-- /end Answer 1 --> <!-- Answer 2 --> <TR> <TD> <SPAN class="BoxStory"> No </SPAN> </TD> <TD align=center><INPUT TYPE=RADIO NAME="Answer168279" VALUE=2> </TD> </TR>
So that tells us this is a simple form which is posted to URL "http://poll.cnn.com/," the script is called "poll," its argument is called "1682781," and the name/value posted is "Answer168279=1" for yes, and "Answer168279=2" for no. There is a hidden attribute giving the question number, too.
It doesn't matter which way you stuff this poll, the point is that a news organization needs to decide if it is in the news business or the entertainment business. Here's the program to do it:
// implements a votebot to stuff Internet polls import java.io.*; import java.net.*; public class votebot { public static void main (String args[]) { try { for (int i=0; i<1000; i++) { URL u = new URL("http://poll.cnn.com"); URLConnection uc = u.openConnection(); uc.setDoOutput(true); OutputStream os = uc.getOutputStream(); PrintStream ps = new PrintStream(os); ps.print("GET /poll?1682781p\r\n"); ps.print("Question=1&Answer168279=2\r\n"); System.out.print("."); } } catch (Exception ex) { System.out.println("Excpn: "+ex.getMessage()); } } }
If this doesn't work for you, there are several possible reasons. There could be a bug in the code. Or the polling site may be employing "electronic countermeasures," such as discarding multiple inputs from one IP address. Or the "poll" may in fact be completely fake and discard all input from anyone at all times.
After writing several more test programs, I reached the conclusion that the "results" of the CNN online polling are completely unrelated to the web votes cast!