- From: Kevin L <kevl88@yahoo.com>
- Date: Tue, 19 Sep 2000 15:16:02 -0700 (PDT)
- To: Timo.Ross@ic3s.de
- Cc: kevl88@yahoo.com, www-lib@w3.org
Hi Timo, Thanks for your advise! Based on HTPostFormAnchorToChunk() and HTPostFormAnchor(), I created two functions(see below) to post arbitrary data, now I can send request to server properly, the returning chunk I get however, is always empty. If I plug-in a HTXML callback with the built-in xml parser, I can see the correct reply data are sent back, so I know the reply data are somewhere but I just can't get them in one chunk. The two functions look pretty simple to me, but there must be something I missed. I really appreciate any help!! /* Send an arbitrary doc request using POST from an anchor ** --------------------------------------------- ** Request a document referencd by an anchor object appended with the ** docbuf given. */ PUBLIC HTParentAnchor * HTPostDocAnchor (char * docbuf, HTFormat form, HTAnchor * anchor, HTRequest * request) { HTParentAnchor * postanchor = NULL; if (docbuf && anchor && request) { HTUserProfile * up = HTRequest_userProfile(request); char * tmpfile = HTGetTmpFileName(HTUserProfile_tmp(up)); char * tmpurl = HTParse(tmpfile, "file:", PARSE_ALL); if (docbuf) { /* ** Now create a new anchor for the post data and set up ** the rest of the metainformation we know about this anchor. The ** tmp anchor may actually already exist from previous postings. */ postanchor = (HTParentAnchor *) HTAnchor_findAddress(tmpurl); HTAnchor_clearHeader(postanchor); HTAnchor_setDocument(postanchor, docbuf); HTAnchor_setLength(postanchor, strlen(docbuf)); HTAnchor_setFormat(postanchor, form); /* ** Bind the temporary anchor to the anchor that will contain the ** response */ HTLink_removeAll((HTAnchor *) postanchor); HTLink_add((HTAnchor *) postanchor, (HTAnchor *) anchor, NULL, METHOD_POST); /* Set up the request object */ HTRequest_addGnHd(request, HT_G_DATE); /* Send date header */ HTRequest_setAnchor(request, anchor); HTRequest_setEntityAnchor(request, postanchor); HTRequest_setMethod(request, METHOD_POST); /* Add the post callback function to provide the data */ HTRequest_setPostCallback(request, HTEntity_callback); /* Now start the load normally */ launch_request(request, NO); fprintf(stderr, "request launched\n"); } HT_FREE(tmpfile); HT_FREE(tmpurl); } return postanchor; } /* ** POST a URL and save the response in a mem buffer ** ------------------------------------------------ ** Returns chunk if OK - else NULL */ PUBLIC HTChunk * HTPostDocAnchorToChunk (char * docbuf, HTFormat format, HTAnchor * anchor, HTRequest * request) { if (docbuf && anchor && request) { HTChunk * chunk = NULL; HTStream * target = HTStreamToChunk(request, &chunk, 0); HTRequest_setOutputStream(request, target); fprintf(stderr, "ok to postdoc\n"); if (HTPostDocAnchor(docbuf, format, anchor, request) != NULL) { fprintf(stderr, "postdoc returned ok\n"); return chunk; } else { fprintf(stderr, "postdoc returned null\n"); HTChunk_delete(chunk); return NULL; } } return NULL; } --- Timo.Ross@ic3s.de wrote: > Hi Kevin! > I think I understand your problem (-; > I think there is no complete function in LIBWWW that match on you problem > or I do not know this function, but there is always a way. > Please have a look to the souce code of the HTAccess module (HTAccess.c). > There you will find the source of the "HTPostFormAnchorToChunk" function. > This function calls the "HTPostFormAnchor" function. In this function you > can see, what has to be done for a post. There you can modify the parameter > of "HTAnchor_setDocument(postanchor, form_encoded);" and > "HTAnchor_setFormat(postanchor, WWW_FORM);" functions to your demands. > Hope this will help you ?! > Timo! __________________________________________________ Do You Yahoo!? Send instant messages & get email alerts with Yahoo! Messenger. http://im.yahoo.com/
Received on Tuesday, 19 September 2000 18:17:39 UTC