File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
http://aspose.com/file-tools
The moose likes Servlets and the fly likes HttpURLConnection POST problem Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of Soft Skills this week in the Jobs Discussion forum!
JavaRanch » Java Forums » Java » Servlets
Bookmark "HttpURLConnection POST problem" Watch "HttpURLConnection POST problem" New topic
Author

HttpURLConnection POST problem

Matthias Edrich
Greenhorn

Joined: Apr 16, 2004
Posts: 3
Hi y'all,
I am having trouble posting data to a URL.
There's a webpage form out there on the net, which allows me to enter
data and enter it into a database. The for uses the "POST" method to submit the data to its cgi.
Well, now I want to create a servlet, which will post that data directly to the above mentioned cgi.
Here is what I have found out:
1. when I enter the direct url into my browser, the data is inserted successfully. I.e. http://sunnyday.com/binny.cgi?note=blablabla+blablabla
(This is a GET, right).
2. I don't want to use GET, because I found that this limits the amount of data I can "send" to the script. The text I need to send is about 6000 characters long.
3. To be able to post the data / or use the direct URL, I need to log in. I.e. the browser pops up a small authentication window.
4. I have code, which I think covers the authentication, but, as it turns out somehow doesn't submit my data correctly. I have attached my code below. It seems that the code knows where to go... i.e. Goes to the CGI. But is also seems that the CGI can't see the variables I am Posting to it, because, it acts as if I hadn't given it anything. (When I type in http://sunnyday.com/binny.cgi, it says that it can't do anything without parameters. WIth my code, I get the same answer back).
Here's my question: What am I doing incorrectly? How can I POST data to this CGI? How can I give it this large amount of data?

Hi Marilyn, in case you see this :-) Hope you're doing well.
/**
*I provide the following variables:
*username = myuser
*password = mypassword\
*spWebURLString = "http://www.sunnyday.com/cgi-bin/web.cgi"
*spWebParameters = "note=blablabla+blablal+dsf&case=546345&id=4545&docid=7fg&save=Save";
*/
Authenticator.setDefault(new SimpleAuthenticator(username, password));
HttpURLConnection uc = (HttpURLConnection)(new URL(spWebURLString)).openConnection();
// *** POST-method ***
uc.setDoOutput(true);
OutputStream os = uc.getOutputStream();
OutputStreamWriter ow = new OutputStreamWriter(os);
System.err.println(uc.getResponseCode() + " and " + uc.getResponseMessage());
ow.write(spWebParameters);
ow.close();
BufferedReader in = new BufferedReader(new InputStreamReader(uc.getInputStream()));
String line;
while ((line = in.readLine()) != null) System.out.println(line);
in.close();
Matthias Edrich
Greenhorn

Joined: Apr 16, 2004
Posts: 3
I fixed the problem with the help of others. Here is the tip I got:
/** post data to an url that requires authorization and get a response as well
@param urlstr the complete url, including http://
@param username the username
@param password the password
@param parameters the parameters in unencoded-url format (param1=value¶m2=value etc.)
@return the response generated by the url from the post
*/
public static String postDataAuthorize(String urlstr, String parameters, String username, String password)
throws IOException
{
URL url = new URL(urlstr);
HttpURLConnection hpcon = null;

try{
String userPassword = username + ":" + password;
String encoding = new sun.misc.BASE64Encoder().encode (userPassword.getBytes());
hpcon = (HttpURLConnection) url.openConnection();
hpcon.setRequestMethod("POST");
hpcon.setRequestProperty("Content-Length", "" + Integer.toString(parameters.getBytes().length));
hpcon.setRequestProperty ("Authorization", "Basic " + encoding);
//hpcon.setRequestProperty("User-Agent", "MLI/Java development environment");
hpcon.setRequestProperty("Content-Language", "en-US");
hpcon.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
hpcon.setUseCaches (false);
hpcon.setDoInput(true);
hpcon.setDoOutput(true);
DataOutputStream printout = new DataOutputStream (hpcon.getOutputStream ());
printout.writeBytes (parameters);
printout.flush ();
printout.close ();

// getting the response is required to force the request, otherwise it might not even be sent at all
BufferedReader in = new BufferedReader(new InputStreamReader(hpcon.getInputStream()));
String input;
StringBuffer response = new StringBuffer(256);

while((input = in.readLine()) != null) {
response.append(input + "\r");
}
return response.toString();

} catch(Exception e){
throw new IOException(e.getMessage());
} finally {
if(hpcon != null){
hpcon.disconnect();
}
}
}
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: HttpURLConnection POST problem