How to make a post request to some other server from apex controller

Can anyone explain how can i make a post request to some other server from apex controller and get the response back?

For example server url is – HTTP://xxx.xom/charge

I have to send a post request on above URL from apex controller and need the response back.

Thanks in advance

Answer

public class AuthCallout {

 public void basicAuthCallout(){
 HttpRequest req = new HttpRequest();
 req.setEndpoint('http://www.yahoo.com');
 req.setMethod('GET');

 // Specify the required user name and password to access the endpoint 

 // As well as the header and header information 


 String username = 'myname';
 String password = 'mypwd';

 Blob headerValue = Blob.valueOf(username + ':' + password);
 String authorizationHeader = 'BASIC ' +
 EncodingUtil.base64Encode(headerValue);
 req.setHeader('Authorization', authorizationHeader);

 // Create a new http object to send the request object 

 // A response object is generated as a result of the request   


 Http http = new Http();
 HTTPResponse res = http.send(req);
 System.debug(res.getBody());
  }
 }

This is the basic code.Now it depends on how you are doing Callout.If you have WSDL and converted into apex and then you may use stub classes .

https://login.salesforce.com/help/doc/en/code_wsdl_to_package.htm

Document above tells how you will parse into apex classes.

http://www.salesforce.com/us/developer/docs/apexcode/Content/apex_callouts.htm

Read through the document.

Similary just use setbody method to input the body and call the request URL

public static void sendNotification(String name, String city) {

    HttpRequest req = new HttpRequest();
    HttpResponse res = new HttpResponse();
    Http http = new Http();

    req.setEndpoint('http://my-end-point.com/newCustomer');
    req.setMethod('POST');
    req.setBody('name='+EncodingUtil.urlEncode(name, 'UTF-8')+'&city='+EncodingUtil.urlEncode(city, 'UTF-8'));
    req.setCompressed(true); // otherwise we hit a limit of 32000

    try {
        res = http.send(req);
    } catch(System.CalloutException e) {
        System.debug('Callout error: '+ e);
        System.debug(res.toString());
    }

}

// run WebServiceCallout.testMe(); from Execute Anonymous to test
public static testMethod void testMe() {
    WebServiceCallout.sendNotification('My Test Customer','My City');
}

Attribution
Source : Link , Question Author : Pramod Kumar , Answer Author : Mohith Shrivastava

Leave a Comment