For the benefit of someone that may search the archives : I figured out why mine does
not work.
The content type header needs to be set as follows :
authpost.setRequestHeader("Content-Type", authpost.FORM_URL_ENCODED_CONTENT_TYPE);
BEFORE setRequestBody is called....
-----Original Message-----
From: Anu Kulatunga
Sent: Thursday, August 14, 2003 10:45 AM
To: Roland Weber; Commons HttpClient Project
Subject: HTTPClient PostMethod - postinf form data
Please copy my address ( [EMAIL PROTECTED]) in your response as I am not a
sunbbscriber to this list yet.
I an trying to invoke a HTTP POST to amazon.com.
The form has 2 parameters, url=Books and field-keywords.
If I use the following the call works fine :
NameValuePair action = new NameValuePair("url", "Books");
NameValuePair url = new NameValuePair("field-keywords", "java");
authpost.setRequestBody(new NameValuePair[] {action, url});
If I use the setRequestBody that takes in a String the website reports that no data
was found.
In other words the follwoing does not work :
authpost.setRequestBody("url=Books&field-keywords=java");
And neither does this .... (I looked that the source code for the PostMethod).
authpost.setRequestBody(EncodingUtil.formUrlEncode((new NameValuePair[] {action,
url}), authpost.getRequestCharSet()));
Please help me understand why I cannot pass a string like
"url=Books&field-keywords=java" to the PostMethod sucessfully.
My class is attached herewith:
import org.apache.commons.httpclient.*;
import org.apache.commons.httpclient.cookie.CookiePolicy;
import org.apache.commons.httpclient.cookie.CookieSpec;
import org.apache.commons.httpclient.methods.*;
import org.apache.commons.httpclient.util.EncodingUtil;
import java.io.*;
public class AkshayDemo2
{
static final String LOGON_SITE = " www.amazon.com";
static final int LOGON_PORT = 80;
public AkshayDemo2() {
super();
}
public static void main(String[] args) throws Exception {
HttpClient client = new HttpClient();
client.getHostConfiguration().setHost(LOGON_SITE, LOGON_PORT, "http");
PostMethod authpost = new
PostMethod("/exec/obidos/search-handle-form/002-6745494-8676845");
/*
// This block works fine
NameValuePair action = new NameValuePair("url", "Books");
NameValuePair url = new NameValuePair("field-keywords", "java");
authpost.setRequestBody(new NameValuePair[] {action, url});
*/
// None of these work !!!!!!!!!!!!
//authpost.setRequestBody("url=Books&field-keywords=java");
authpost.setRequestBody(EncodingUtil.formUrlEncode((new NameValuePair[] {action,
url}), authpost.getRequestCharSet()));
System.out.println("Request -->"+authpost.getRequestBodyAsString()+"<-- ");
System.out.println("Headers --> BEGIN ");
Header[] requestHeaders = authpost.getRequestHeaders();
for (int i=0; i<requestHeaders.length; i++){
System.out.print(requestHeaders[i]);
}
System.out.println("Headers --> END ");
client.executeMethod(authpost);
System.out.println("Login form post: " + authpost.getStatusLine().toString());
// release any connection resources used by the method
int statuscode = authpost.getStatusCode();
System.out.println("Status code = "+statuscode);
if (statuscode==200) showResponse(authpost);
authpost.releaseConnection();
}
private static void showResponse(HttpMethodBase method){
System.out.println("Response Body ---------------- BEGIN");
System.out.println(method.getResponseBodyAsString());
System.out.println("Response Body ---------------- END");
}
private static void displayHTML(String html){}
}