W3C home > Mailing lists > Public > www-lib@w3.org > April to June 2003

Posting data and HTAnchor_findAddress

From: Juliana Blaser <Juliana.Blaser@Sun.COM>
Date: Mon, 07 Apr 2003 14:58:13 -0400
To: www-lib@w3.org
Message-id: <3E91CA45.4060106@sun.com>

Hi --

I've spent days trying to get a post request to work.  If someone could 
take a look at the code below, I'd be extremely grateful.  All I want to 
do (since I'm passing in username and password) is to send the 
name-value pairs as a POST rather than a GET.  The arguments that I'm 
passing in are as follows:

"https://localhost:4567/esmih/CCIServlet" "jobType=register" 
"eName=test" "userName=BigBen" "password=London"

In the code below, uri and nameValuePairs have the following values:
        uri = https://localhost:4567/esmih/CCIServlet
        nameValuePairs = 
jobType=register+eName=test+userName=BigBen+password=London+

When I debug, the HTAnchor_findAddress function creates new anchor 
because one isn't found in the hash table.  It populates it with the 
default values.  The default values never change so the I'm not sure if 
this is causing a problem....suggestions?  Please?

Thanks,
Juliana
 
*********************************************************************
#include "WWWLib.h"
#include "WWWHTTP.h"
#include "WWWInit.h"
#include "WWWSSL.h"
#include <string.h>
#include <stdlib.h>

#define APP_NAME        "configUtility"
#define APP_VERSION        "1.0"
#define MAX_BUFFER        512


PRIVATE int terminate_handler (HTRequest * request, HTResponse * response,
                   void * param, int status)
{
    HTEventList_stopLoop ();
    return HT_ERROR;
}
void usage()
{
   printf("Enter the URI of the management station you want to POST to 
and the contents to POST.\n");
   printf("\t%s <URI> <POST body contents>\n", APP_NAME);
   printf("EXAMPLE: %s <protocol://host[:port]/URI> <param1>=<value1> 
<param2>=<value2>...\n", APP_NAME);
}

PUBLIC HTChunk* HTPostAnchorToChunk(HTParentAnchor* src, HTAnchor* dest, 
HTRequest* req)
{
    if (src && dest && req)
    {
        HTChunk* chunk = NULL;
        HTStream* target = HTStreamToChunk(req, &chunk, 0);
        HTRequest_setOutputStream(req, target);
        if (NULL != HTPostAnchor(src, dest, req))
        {
            return chunk;
        }
        else
        {
            HTChunk_delete(chunk);
            return NULL;
        }
    }
    return NULL;
}

int main (int argc, char ** argv)
{

   HTRequest* request = NULL;
   HTParentAnchor* source = NULL;
   HTAnchor* uriObject = NULL;
   HTChunk* chunkMain = NULL;
   char* uri = NULL;
   char* nameValuePairs = NULL;
   char* pwd = NULL;
   BOOL status = NO;

   HTLibInit(APP_NAME, APP_VERSION);
 
   HTProfile_newNoCacheClient(APP_NAME, APP_VERSION);

   HTNet_addAfter(terminate_handler, NULL, NULL, HT_ALL, HT_FILTER_LAST);

   if(argc >= 3)
   {
    int index = 0;
    printf("Number of args = %d\n", argc);
   
    uri = (char *)malloc(strlen(argv[1]) + 1);
    if (NULL == uri)
    {
        return -1;
    }
    strcpy(uri, argv[1]);
    printf("URI = %s\n", uri);
   
    nameValuePairs = (char *)malloc(MAX_BUFFER + 1);
    if (NULL == nameValuePairs)
    {
        return -1;
    }
  
    printf("nameValuePairs var should be empty now.  Is it?  %s\n", 
nameValuePairs);
    for (index = 2; index < argc; index++)
    {
        printf("argv[%d] = %s\n", argv[index]);
       
        /*  Need to still handle special cases (i.e. space) and encode 
them  */
        nameValuePairs = strcat(nameValuePairs, argv[index]);
        printf("name-value pair #%d added: %s\n", index, nameValuePairs);
        nameValuePairs = strcat(nameValuePairs, "+"); 
    }  
   }
   else
   {
    usage();exit(1);
   
   }

    HTSSL_protMethod_set(HTSSL_V23);
    HTSSL_verifyDepth_set(2);
    HTSSLhttps_init(NO);
    HTTransportInit();
    HTProtocolInit();
    HTNetInit();
   
    if (nameValuePairs && *nameValuePairs && uri && *uri)
    { 
    request = HTRequest_new();
   
    uriObject = HTAnchor_findAddress(uri);
   
    source = HTTmpAnchor(NULL);
    HTAnchor_setDocument(source, nameValuePairs);
    HTAnchor_setFormat(source, WWW_PLAINTEXT);

    HTAnchor_setLength(source, strlen(nameValuePairs));

    chunkMain = HTPostAnchorToChunk(source, uriObject, request);

    if (chunkMain)
    {
        char * string;
        HTEventList_loop (request);
        string = HTChunk_toCString(chunkMain);
        printf("%s", string ? string : "No response from server\n");
        HT_FREE(string);
    }
   
    free(uri);
    free(nameValuePairs);
   
    HTRequest_delete(request);
    HTFormat_deleteAll();
   
    HTSSLhttps_terminate();
    HTLibTerminate(); 
    }
   
    return 0;
}
Received on Monday, 7 April 2003 14:59:18 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Monday, 23 April 2007 18:18:43 GMT