tags:

views:

50

answers:

3

I am trying to do a POST request with a set of parameters to a given URL. The problem I am having is that the POST request is made, but no parameters are passed.

    RequestBuilder builder = new RequestBuilder(RequestBuilder.POST, url);

    StringBuilder sb = new StringBuilder();
    for ( String k: parmsRequest.keySet() ) {
        String vx = URL.encodeComponent( parmsRequest.get(k));
        if ( sb.length() > 0 ) {
            sb.append("&");
        }
        sb.append(k).append("=").append(vx);
    }

    try {
        Request response = builder.sendRequest( sb.toString(), new RequestCallback() {

            public void onError(Request request, Throwable exception) {}

            public void onResponseReceived(Request request, Response response) {}
        });
    } catch (RequestException e) {}
}

This works just fine if I use mode GET and manually add the querystring to the request - but I need to use POST as the data to be passed along may be large....

+3  A: 

Set the header of your request:

builder.setHeader("Content-type", "application/x-www-form-urlencoded");
z00bs
Thanks! My acceptor servlet was not working without.... never would have thought about that! Thanks!
Lenz
Glad I Could help!
z00bs
A: 

A web form can't be used to send a request to a page that uses a mix of GET and POST. If you set the form's method to GET, all the parameters are in the query string. If you set the form's method to POST, all the parameters are in the request body.

Source: HTML 4.01 standard, section 17.13 Form Submission url: http://www.w3.org/TR/html4/interact/forms.html#submit-format

kospiotr
A: 

This should already work - but when using POST, you'll have to read the submitted data differently in your Servlet (I assume, you're using Java on the server side?)

You could try it with a Servlet like this:

public class MyServlet extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
                   throws ServletException, IOException {

        System.out.println(req.getReader().readLine());
    }
}

Of course, you can copy the contents of req.getReader() or req.getInputStream() to your own buffer or string etc.

Chris Lercher