[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Webservices via HTTPS with user/pass



Sender: Scott Klement <sk@xxxxxxxxxxxxxxxx>


Has anybody been able to call a web service via HTTPS and also supplying
a username/password?  I have worked with EXAMPLE7 (Example of supplying
USER/PASS to HTTP server) with a mixture of EXAMPLE3 (to initialize the
SSL API's) and been able to retrieve a page (via http_url_get) and save
that to the IFS.  But can this be modified to use http_url_POST?

To test this, I wrote a quick program. It connects using HTTPS to a demo WebService, and downloads a list of users. It works for me with no problems:


H DFTACTGRP(*NO) BNDDIR('LIBHTTP/HTTPAPI')

/copy libhttp/qrpglesrc,httpapi_h

     D addCount        PR
     D   void                          *   value
     D   depth                       10I 0 value
     D   name                      1024A   varying const
     D mapData         PR
     D   void                          *   value
     D   depth                       10I 0 value
     D   name                      1024A   varying const
     D   path                     24576A   varying const
     D   value                    32767A   varying const

     D xml             s            500A   varying
     D rc              s             10I 0
     D x               s             10I 0
     D msg             s             50A

     D count           s             10I 0
     D odslist         ds                  occurs(200)
     D   ods_line                     4A   varying
     D   ods_name                    30A   varying
     D   ods_mins                     4A   varying

      /free
       *inlr = *on;
       http_setauth( HTTP_AUTH_BASIC: 'demo': 'httpapi' );

       xml = '<?xml version="1.0"?>'
           + '<OdsListReq>'
           +   '<Server>ods.ods.net</Server>'
           +   '<ColumnList>'
           +     '<Column>line</Column>'
           +     '<Column>name</Column>'
           +     '<Column>mins</Column>'
           +   '</ColumnList>'
           + '</OdsListReq>';

       rc = http_url_post_xml( 'https://www.klements.com/webserv/odslist'
                             : %addr(xml) + 2
                             : %len(xml)
                             : %paddr(addCount)
                             : %paddr(mapData)
                             : *NULL );
       if (rc <> 1);
          msg = http_error();
          dsply msg;
          return;
       endif;

       for x = 1 to count;
          %occur(odslist) = x;
          msg = ods_line + '  ' + ods_name;
          dsply msg;
       endfor;

return;

/end-free

     P addCount        B
     D addCount        PI
     D   void                          *   value
     D   depth                       10I 0 value
     D   name                      1024A   varying const
      /free
         if name = 'User';
            count = count + 1;
            %occur(odslist) = count;
         endif;
      /end-free
     P                 E


P mapData B D mapData PI D void * value D depth 10I 0 value D name 1024A varying const D path 24576A varying const D value 32767A varying const /free select; when (name = 'line'); ods_line = %trim(value); when (name = 'mins'); ods_mins = %trim(value); when (name = 'name'); ods_name = %trim(value); endsl; /end-free P E

This code requires V5R1 to run because it uses HTTPAPI's XML parser and free-format RPG.

If you try this code on your machine does it work?

If you don't want to use HTTPAPI's XML parser, you can change http_url_post_xml to http_url_post, and it will still work (byt the results will be in an XML file in the IFS instead of displayed on the screen.)


----------------------------------------------------------------------- This is the FTPAPI mailing list. To unsubsribe from the list send mail to majordomo@xxxxxxxxxxxxx with the body: unsubscribe ftpapi mymailaddr -----------------------------------------------------------------------