readpost

Les Cottrell. Last Update: 3 Mar 1997

ReadPost: PROCEDURE; PARSE ARG StdinFile
  /******************************************** */
  /*Read HTML FORM POST input (if any) from     */
  /*standard input. Note that if the caller     */
  /*provides a filename then we save the input  */
  /*in case we need to send it to another       */
  /*script. If so we can restore the stdin for  */
  /*the called command by  using the command:   */
  /*ADDRESS UNIX script '<' StdinFile           */
  /*A good way to get a unique filename to save */
  /*the standard input in, is to use the process*/
  /*id. For example in Uni-REXX:                */
  /* StdinFile='/tmp/stdin'_GETPID()            */
  /* Post=ReadPost(StdinFile)                   */
  /*If a StdinFile is specified, but ReadPost   */
  /*is unable to write the standard input to    */
  /*StdInFile, then ReadPost EXITs.             */ 
  /*ReadPost returns the POST input if the      */
  /*REQUEST_METHOD="POST" else it returns null. */
  /*ReadPost also returns a null string if the  */
  /*REQUEST_METHOD="POST" but there is no input */
  /*in the standard input.                      */
  /*N.b. the returned Post input does NOT have  */
  /*plus signs (+) converted to spaces or hex   */
  /*ASCII %XX encodings converted to characters.*/  
  /******************************************** */      
  In=''
  IF GETENV('REQUEST_METHOD')="POST" THEN DO
    N=GETENV('CONTENT_LENGTH')
    IF N='' THEN RETURN In
    In=CHARIN(,1,GETENV('CONTENT_LENGTH'))
    IF StdinFile\='' THEN DO
      IF CHAROUT(StdinFile,In,1) \=0 THEN DO
        SAY "500: Can't write all POST chars!" 
        EXIT
      END
      Fail=CHAROUT(StdinFile)/*Close the file*/
    END
  END
RETURN In