Re: pls help me to send a request with data and get a response.

Hi,

Hope you got some solution by now.  I had similar requirement like as follows :
1)  post XML encoded buffer to a particular servlet (URL) and wait for response
2)  The response data should be read by the application and process it.

For that, I disbled the prompt (HT_A_PROMPT) by library and instead attached
a simple callback for the same prompt.

Following is the sample :

/* Initiate libwww :- Create a new premptive client */
    HTProfile_newNoCacheClient(appName, "1.0");

    /* Add our own filter to update the history list */
    HTNet_addAfter(terminate_handler, NULL, NULL, HT_ALL, HT_FILTER_LAST);

    /* find the Alert callback "HTPrompt" */
    cbf = HTAlert_find (HT_A_PROMPT);
    if (HTAlert_delete (cbf) == NO)
    {
        printf "Failed to delete default library callback <HTPrompt>\n");
        return;
    }

    /* add our own callback, It will be called by the libwww library  */
    HTAlert_add(saveResponseInFile, HT_A_PROMPT);

    if (data && *data && dst_str && *dst_str)
    {
        /* Make source relative to where we are */
        char * cwd = HTGetCurrentDirectoryURL();

        printf("Posting to %s\n",dst_str);

        /* Create a request */
        request = HTRequest_new();

        /* Get an anchor object for the destination URI */
        dst = HTAnchor_findAddress(dst_str);

        /*
         ** Dream up a source anchor (an editor can for example use this).
         ** After creation we associate the data that we want to post and
         ** set some metadata about what the data is. More formats can be found
         ** ../src/HTFormat.html
         */
         src = HTTmpAnchor(NULL);
         HTAnchor_setDocument(src, data);
         HTAnchor_setFormat(src, WWW_PLAINTEXT);

         /*
         ** If not posting to an HTTP/1.1 server then content length MUST be
         ** there. If HTTP/1.1 then it doesn't matter as we just use chunked
         ** encoding under the covers
         */
         HTAnchor_setLength(src, strlen(data));

         /* POST the source to the dest */
         status = HTPostAnchor(src, dst, request);

         printf ("Posted data to URL.\nWaiting for response....");

         /* We don't need these anymore */
         HT_FREE(cwd);

         /* Go into the event loop... */
         if (status == YES) HTEventList_loop(request);
    }
}


However, I have still more to find and would appreciate any sort of help :
1)  How should I do it without having the response data to be saved in a file
     Instead simply get it in buffer  , and
2)  For a request, its blocked until it gets response, if I'm correct.  So how
should
     have multiple non blocking requests.

I would work to find these, but would appreciated any help/suggestion for the
same.

Regards,
Manoj






Nandika Mirihana <Nandika@eRunway.com> on 12/18/2001 08:43:14 AM

To:   www-lib@w3.org
cc:    (bcc: Manoj Nautiyal/HSS)

Subject:  pls help me to send a request with data and get a response.




Hi ,

    I am a new commer to the libwww. I want to post data to remote server
and get response.
I have already send a request ( without data)  to the remote http server .
but it is not the response that I want .
This is my code

int HTTPPost::sendRequest()
{
   HTRequest * request = NULL;
    HTParentAnchor * src = NULL;
    HTAnchor * dst = NULL;
    HTChunk *  chunck = NULL;
    char * dst_str = NULL;
    char * data = NULL;
    BOOL status = NO;
  HTChunk* p_pphc_responseData = NULL;
   dst_str ="http://nagoya.apache.org:5049";
//:5049/axis/servlet/AxisServlet";
    data = "hello";
    if (data && *data && dst_str && *dst_str) {

     /* Make source relative to where we are */
     char * cwd = HTGetCurrentDirectoryURL();

     HTPrint("Posting to %s\n", dst_str);

     /* Create a request */
     request = HTRequest_new();
   //set the output format and target stream
    HTRequest_setOutputStream(request, HTStreamToChunk(request,
&p_pphc_responseData, -1));
    HTRequest_setOutputFormat(request, HTAtom_for("text/xml"));
    /* Get an anchor object for the destination URI */
   dst = HTAnchor_findAddress(dst_str);
        /*
     ** Dream up a source anchor (an editor can for example use this).
     ** After creation we associate the data that we want to post and
     ** set some metadata about what the data is. More formats can be
found
     ** ../src/HTFormat.html
     */
     src = HTTmpAnchor(NULL);
     HTAnchor_setDocument(src, data);
     HTAnchor_setFormat(src, WWW_PLAINTEXT);

     /*
     ** If not posting to an HTTP/1.1 server then content length MUST be
     ** there. If HTTP/1.1 then it doesn't matter as we just use chunked
     ** encoding under the covers
     */
     HTAnchor_setLength(src, strlen(data));

     /* POST the source to the dest */
     status = HTPostAnchor(src, dst, request);

     //status = HTTraceAbsolute (dst_str,request);

     /* We don't need these anymore */
     HT_FREE(cwd);

     /* Go into the event loop... */
     if (status == YES)
          HTEventList_loop(request);

    }

 return 0;
}


This is the output
Posting to http://nagoya.apache.org:5049
Looking up nagoya.apache.org
Looking up nagoya.apache.org
Contacting nagoya.apache.org
Writing 1Kbytes
Reading...
Reading...
Read 1Kbytes
Done!
A redirection may change the behavior of this method - proceed anyway? (y/n)
y
Writing 1Kbytes
Reading...
Reading...
Please give name of file to save in: (RETURN for [C:\Temp\index.html])
Read (0% of 7K)
Done!

I don't know how "A redirection may change the behavior of this method -
proceed anyway? (y/n) y"  and "Please give name of file to save in: (RETURN
for [C:\Temp\index.html])" come
pls help me to send a request with data and get a response.

Thank you
Regards,
-Nandika

Received on Wednesday, 19 December 2001 10:20:14 UTC