You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by pascal GEND <pa...@esstin.uhp-nancy.fr> on 2001/06/28 16:30:22 UTC
FORM submission POST to a server
Hi,
I'd like to POST data to an http server with a java program (in the same way a www browser does it), in order to parse the response and do something with it. I have an example with the GET method but not POST.
For instance, consider the example below:
<form action="http://host/cgi-bin/program" method=post>
<input type="hidden" name="field1" value="valuefield1">
<input type="text" name="field2" value="valuefield2">
<input type="submit" name="submit" value="submit">
What is the corresponding JAVA code (I use the JDK 117B)?
Many thanks,
Pascal
Re: FORM submission POST to a server
Posted by Sam Newman <sa...@stamplets.com>.
I meant URLConnection class, not program!
----- Original Message -----
From: Sam Newman
To: tomcat-user@jakarta.apache.org
Sent: Thursday, June 28, 2001 4:19 PM
Subject: Re: FORM submission POST to a server
hmm, I think you probably want to use the URL connection program. There is a javaworld tip about posting from an applet - its more about the security considerations, but should contain the sample code you want. I seem to remeber the O'Reilly java network programming book also contains an example use of the UrlConnection - try downloading the examples for the book.
The javaworld tip: http://www.javaworld.com/javatips/jw-javatip41.html, and the earlier tip: http://www.javaworld.com/javaworld/javatips/jw-javatip34.html/
sam
Re: FORM submission POST to a server
Posted by Sam Newman <sa...@stamplets.com>.
hmm, I think you probably want to use the URL connection program. There is a javaworld tip about posting from an applet - its more about the security considerations, but should contain the sample code you want. I seem to remeber the O'Reilly java network programming book also contains an example use of the UrlConnection - try downloading the examples for the book.
The javaworld tip: http://www.javaworld.com/javatips/jw-javatip41.html, and the earlier tip: http://www.javaworld.com/javaworld/javatips/jw-javatip34.html/
sam
----- Original Message -----
From: pascal GEND
To: tomcat-user@jakarta.apache.org
Sent: Thursday, June 28, 2001 3:30 PM
Subject: FORM submission POST to a server
Hi,
I'd like to POST data to an http server with a java program (in the same way a www browser does it), in order to parse the response and do something with it. I have an example with the GET method but not POST.
For instance, consider the example below:
<form action="http://host/cgi-bin/program" method=post>
<input type="hidden" name="field1" value="valuefield1">
<input type="text" name="field2" value="valuefield2">
<input type="submit" name="submit" value="submit">
What is the corresponding JAVA code (I use the JDK 117B)?
Many thanks,
Pascal
Re: FORM submission POST to a server
Posted by pete <pe...@claudia.dyn.dhs.org>.
Be aware that the Java URLConnection class only supports HTTP 1.0, which
causes problems when posting to some of the services we run on IIS,
which return replies using HTTP1.1 rendering them unhandle-able with
URLConnection.
Also be aware that a '500' HTTP error will result in a
'FileNotFoundException' which is exceptionally unhelpful if you ever
have to deal with SOAP services that use a code 500 to report
'legitimate' errors as opposed to an 'Internal Server Error' ala Apache.
I have found it worthwhile writing a socket-based POST handler, as below:
This code is ugly, inefficient and may or may not suck in your opinion.
If you have improvements, i'd appreciate it if you'd post them back to me.
Pass your POST message as a URL-Encoded string, and you'll probably need
to set content-type as application/x-www-formencoded (you'll have to
look up the exact encoding name)
i.e.
URLEncoder u=new URLEncoder();
String
Message=u.encode("field1=valuefield1&field2=valuefield2&submit=submit");
postSOAPMessageSock("yourserver","/cgi-bin/yourcgi.cgi",80,Message,"SOAPActionifRequired");
and the post method is listed below:
public String postSOAPMessageSock(String server, String strURL,int port,
String Message, String action)
{
try
{
Socket sock = new Socket(server, port);
// Get input and output streams for the socket connection
DataInputStream inStream = new
DataInputStream(sock.getInputStream());
DataOutputStream outStream = new
DataOutputStream(sock.getOutputStream());
outStream.writeBytes("POST "+strURL+" HTTP/1.0\r\n");
// Next, send the content type (don't forget the \r\n)
outStream.writeBytes("Content-type: text/xml\r\n");
//Optional - required when dealing with some SOAP services
outStream.writeBytes("SOAPAction: "+action+"\r\n");
outStream.writeBytes("Content-length:
"+Message.length()+"\r\n");
outStream.writeBytes("\r\n");
outStream.writeBytes(Message);
System.out.println("\n\nMessage Posted:
"+server+":"+strURL+":"+port+":"+action+":"+Message+"\n\n");
BufferedReader sr=new BufferedReader(new
InputStreamReader(inStream));
//read out from the pipe a line at a time
String line;
boolean bodyfound=false;
StringBuffer buffer=new StringBuffer();
while((line=sr.readLine()) != null)
{
if (line.equals(""))
{bodyfound=true;}
if (bodyfound)
{buffer.append(line);}
//System.out.println(bodyfound+":"+line);
}
//close everything up when we're done
sr.close();
inStream.close();
outStream.close();
//System.out.println(buffer.toString());
return buffer.toString();
}
catch (Exception e)
{
//Error is formatted as xml to avoid errors if run through a parser.
String errorstring="<xml><error>Could not contact Server.</error></xml>";
//e.printStackTrace();
//System.out.println(errorstring);
return errorstring;
}
}
Hope that helps
-Pete
> Hi,
>
>
>
> I'd like to POST data to an http server with a java program (in the
> same way a www browser does it), in order to parse the response and do
> something with it. I have an example with the GET method but not POST.
>
>
>
> For instance, consider the example below:
>
>
>
> <form action="http://host/cgi-bin/program" method=post>
>
> <input type="hidden" name="field1" value="valuefield1">
>
> <input type="text" name="field2" value="valuefield2">
>
> <input type="submit" name="submit" value="submit">
>
>
>
> What is the corresponding JAVA code (I use the JDK 117B)?
>
>
>
> Many thanks,
>
>
>
> Pascal
>