FormPoster.java001: import java.net.*;
002: import java.io.*;
003:
004:
005: public class FormPoster {
006:
007: private URL url;
008: private QueryString query = new QueryString();
009:
010: public FormPoster (URL url) throws IllegalArgumentException {
011: if (!url.getProtocol().toLowerCase().startsWith("http")) {
012: throw new IllegalArgumentException("Posting only works for http URLs");
013: }
014: this.url = url;
015: }
016:
017: public void add(String name, String value) {
018: query.add(name, value);
019: }
020:
021: public URL getURL() {
022: return this.url;
023: }
024:
025: public InputStream post() {
026:
027: try {
028: // open the connection and prepare it to POST
029: URLConnection uc = url.openConnection();
030: System.out.println("do output: " + uc.getDoOutput());
031: System.out.println("do input: " + uc.getDoInput());
032: uc.setDoOutput(true);
033: System.out.println("do output: " + uc.getDoOutput());
034: System.out.println("do input: " + uc.getDoInput());
035: OutputStream raw = uc.getOutputStream();
036: OutputStreamWriter out = new OutputStreamWriter(
037: new BufferedOutputStream(raw), "UTF-8");
038: //OutputStreamWriter out = new OutputStreamWriter(raw,"UTF-8");
039:
040: // The POST line, the Content-type header,
041: // and the Content-length headers are sent by the URLConnection.
042: // We just need to send the data
043: System.out.println("QueryString: " + query);
044: out.write(query.toString());
045: out.write("\r\n");
046: out.flush();
047: out.close();
048: // Return the response
049: InputStream in = uc.getInputStream();
050: return in;
051: }
052: catch (IOException e) {
053: e.printStackTrace();
054: return null;
055: }
056:
057:
058:
059: }
060:
061:
062: public static void main(String args[]) {
063:
064: URL url;
065:
066: if (args.length > 0) {
067: try {
068: url = new URL(args[0]);
069: }
070: catch (MalformedURLException e) {
071: System.err.println(e);
072: System.err.println("Usage: java FormPoster url");
073: return;
074: }
075: }
076: else {
077: try {
078: url = new URL("https://johnloomis.org/python/showfields.py");
079: }
080: catch (MalformedURLException e) { // shouldn't happen
081: System.err.println(e);
082: return;
083: }
084: }
085:
086: FormPoster poster = new FormPoster(url);
087: poster.add("name", "John Loomis");
088: poster.add("class", "ECE 538");
089:
090: try {
091: InputStream in = poster.post();
092: in = new BufferedInputStream(in);
093: // Read the response
094: InputStreamReader r = new InputStreamReader(in);
095: int c;
096: while((c = r.read()) != -1) {
097: System.out.print((char) c);
098: }
099: System.out.println();
100: in.close();
101: }
102: catch (IOException e) {
103: System.err.println(e);
104: e.printStackTrace();
105: }
106:
107: }
108:
109: }
QueryString.java01: import java.net.URLEncoder;
02:
03: public class QueryString {
04:
05: private String query, enc;
06:
07: public QueryString(Object name, Object value) {
08: try {
09: query = URLEncoder.encode(name.toString(),enc) + "=" +
10: URLEncoder.encode(value.toString(),enc);
11: }
12: catch (java.io.UnsupportedEncodingException e) {
13: e.printStackTrace();
14: }
15: }
16:
17: public QueryString() {
18: query = "";
19: enc = "UTF-8";
20: }
21:
22: public synchronized void add(Object name, Object value) {
23:
24: try {
25: if (!query.trim().equals("")) query += "&" ;
26: query += URLEncoder.encode(name.toString(),enc) + "=" +
27: URLEncoder.encode(value.toString(),enc);
28: }
29: catch (java.io.UnsupportedEncodingException e) {
30: e.printStackTrace();
31: }
32:
33: }
34:
35: public String toString() {
36: return query;
37: }
38:
39: }
C:\prog\java_web>java FormPoster do output: false do input: true do output: true do input: true QueryString: name=John+Loomis&class=ECE+538 <html> <head><title>Show fields from CGI query string</title></head> <body> <p><table border> <tr><th>Name<th>Value <tr><td>name<td>John Loomis <tr><td>class<td>ECE 538 </table> </body></html>
Maintained by John Loomis, updated Wed Feb 20 16:08:57 2008