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

    did you mean to include an example server URL? I just see a dash (-)

  • 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');
    }
    

    For starters the requestMethod should be POST rather than GET

    I didn't get how to set request parameter in Post request? Will i have to set them header? can you give a sample code which is setting request parameter in Post http request?

    I updated the code and you can refer for POST request how you will set

License under CC-BY-SA with attribution


Content dated before 7/24/2021 11:53 AM

Tags used