[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: HTTP_get_url_raw
Sender: Scott Klement <klemscot@xxxxxxxxxxxx>
Ooops, sorry, I forgot to close the stream file in that example.
Please add this line of code right after the call to http_url_get_raw:
c callp close(fd)
On Mon, 14 Jul 2003, Scott Klement wrote:
> Sender: Scott Klement <klemscot@xxxxxxxxxxxx>
>
>
> Hi Dirk,
>
> I'm going to send a copy of my response to the FTPAPI mailing list (which
> is used for both FTPAPI and HTTPAPI) so that other people can learn from
> the answers to your questions.
>
> > We are trying your HTTPAPI program, and we are looking for an example of
> > HTTP_get_url_raw. This procedure has 3 parameters, the first one is the
> > url, the third is a pointer of a procedure, but the second we can't
> > determine what that is.
>
> It's just a number which is passed back to your procedure. If you did
> this:
>
> http_url_get_raw('http://foo.com/bar.html': 5: %paddr('MYPROC'))
>
> then each time the procedure called MYPROC is called, it will be passed
> the number 5 as the first argument to the procedure. That's all it
> does, HTTPAPI does not use the number for anything.
>
> It's convienient for passing a file descriptor when you're writing the
> result to a stream file.
>
> >
> > Please can you send me an example of this API?
> >
>
> Sure... Here's a sample program which downloads my socket tutorial to
> your IFS using the http_url_get_raw() routine:
>
>
> *
> * Example of using the http_url_get_raw() routine to receive
> * data from a web server, and display how many bytes have
> * been transferred
> *
> H DFTACTGRP(*NO) ACTGRP(*NEW) BNDDIR('LIBHTTP/HTTPAPI': 'QC2LE')
>
> D/copy libhttp/qrpglesrc,httpapi_h
> D/copy libhttp/qrpglesrc,ifsio_h
> D/copy libhttp/qrpglesrc,errno_h
>
> D save_to_disk PR 10I 0
> D peFD 10I 0 value
> D peData * value
> D peLen 10I 0 value
>
> D fd s 10I 0
> D rc s 10I 0
> D msg s 52A
> D Bytes s 16P 0
>
> c eval *inlr = *on
>
> C* Open a stream file
> c eval fd = open('/sock_tutorial.pdf':
> c O_WRONLY+O_TRUNC+O_CREAT: 511)
> c if fd < 0
> c eval msg = %str(strerror(errno))
> c dsply msg
> c return
> c endif
>
> C* Retrieve Scott Klement's sockets tutorial:
>
> c eval rc = http_url_get_raw(
> c 'http://www.scottklement.com/rpg/' +
> c 'socktut/tutorial.pdf': FD:
> c %paddr('SAVE_TO_DISK'))
>
> c if rc <> 1
> c eval msg = http_error
> c dsply msg
> c endif
>
>
> *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> * This is called by the HTTP_url_get_raw() API each time
> * data is received from the HTTP server.
> *
> * We use it to show the user how many bytes have been
> * received, and then we write the received data to disk.
> *
> * Parameters:
> * peFD = number that we passed to HTTP_url_get_raw().
> * (We use the file descriptor that we got when
> * we opened the stream file that we're saving to)
> * peData = pointer to the data that was received from http
> * server.
> * peLen = length of data received
> *
> * we return the length we received from HTTPAPI if successful
> * or -1 if we can't write the data to disk.
> *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> P save_to_disk B
> D save_to_disk PI 10I 0
> D peFD 10I 0 value
> D peData * value
> D peLen 10I 0 value
>
> D QMHSNDPM PR ExtPgm('QMHSNDPM')
> D MessageID 7A Const
> D QualMsgF 20A Const
> D MsgData 256A Const
> D MsgDtaLen 10I 0 Const
> D MsgType 10A Const
> D CallStkEnt 10A Const
> D CallStkCnt 10I 0 Const
> D MessageKey 4A
> D ErrorCode 32766A options(*varsize)
>
> D dsEC DS
> D dsECBytesP 1 4I 0 inz(0)
> D dsECBytesA 5 8I 0 inz(0)
>
> D wwMsgKey S 4A
> D wwText s 100A varying
>
> c eval Bytes = Bytes + peLen
> c eval wwText = %trim(%editc(Bytes:'P')) +
> c ' bytes received'
>
> c callp QMHSNDPM('CPF9897': 'QCPFMSG *LIBL':
> c wwText: %len(wwText): '*STATUS':
> c '*EXT': 0: wwMsgKey: dsEC)
>
> c if write(peFd: peData: peLen) < 1
> c return -1
> c endif
>
> c return peLen
> P E
>
>
> /define ERRNO_LOAD_PROCEDURE
> /copy libhttp/qrpglesrc,errno_h
> -----------------------------------------------------------------------
> This is the FTPAPI mailing list. To unsubsribe from the list send mail
> to majordomo@xxxxxxxxxxxxx with the body: unsubscribe ftpapi mymailaddr
> -----------------------------------------------------------------------
>
-----------------------------------------------------------------------
This is the FTPAPI mailing list. To unsubsribe from the list send mail
to majordomo@xxxxxxxxxxxxx with the body: unsubscribe ftpapi mymailaddr
-----------------------------------------------------------------------