- From: Cristian Valdebenito <crvabch@entelchile.net>
- Date: Mon, 19 Feb 2001 13:27:03 -0400
- To: www-lib@w3.org
Hi all I implemented the post data and get the result into a chunk, but some times for any web-server HTTP/1.1 the chunk is null, why happend this, someone resolved this problem or have you found and fixed the problem? Help me please ! Cristian This is my version of post: /* ** @(#) $Id: post.c,v 1.4 1999/03/01 13:41:55 frystyk Exp $ ** ** More libwww samples can be found at "http://www.w3.org/Library/Examples/" ** ** Copyright © 1995-1998 World Wide Web Consortium, (Massachusetts ** Institute of Technology, Institut National de Recherche en ** Informatique et en Automatique, Keio University). All Rights ** Reserved. This program is distributed under the W3C's Software ** Intellectual Property License. This program is distributed in the hope ** that it will be useful, but WITHOUT ANY WARRANTY; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more ** details. ** ** Sample showing how to POST data to an HTTP server */ #include "WWWLib.h" #include "WWWInit.h" HTChunk *chunk=NULL; PRIVATE int printer (const char * fmt, va_list pArgs) { return (vfprintf(stdout, fmt, pArgs)); } PRIVATE int tracer (const char * fmt, va_list pArgs) { return (vfprintf(stderr, fmt, pArgs)); } PRIVATE int terminate_handler (HTRequest * request, HTResponse * response, void * param, int status) { char *ent_body; HTEncoding bebe; PRIVATE char * match = "*"; HTParentAnchor * anchor = HTRequest_anchor(request); HTAssocList * headers = HTAnchor_header(anchor); if (headers) { HTAssocList * cur = headers; HTAssoc * pres; while ((pres = (HTAssoc *) HTAssocList_nextObject(cur))) { char * name = HTAssoc_name(pres); char * value = HTAssoc_value(pres); if (match && HTStrCaseMatch(match, name)) HTPrint("%s: %s\n", name, value); } } if ( status == HT_LOADED ) { if ( HTResponse_reason (response) ) HTPrint("\ndata_reason <%s>",HTResponse_reason(response)); if ( HTResponse_format (response) ) HTPrint("format <%s>",HTAtom_name(HTResponse_format (response))); if ( chunk && HTChunk_data (chunk) ){ ent_body = (char *)HTChunk_data (chunk); HTPrint("\ndata <%s>",ent_body); } else HTPrint("\nCHUNK is null\n"); } else HTPrint("LOAD is wrong\n"); /* We are done with this request */ HTRequest_delete(request); /* Terminate libwww */ HTProfile_delete(); exit(0); } int main (int argc, char ** argv) { HTRequest * request = NULL; HTParentAnchor * src = NULL; HTAnchor * dst = NULL; char * dst_str = NULL; char * data = NULL; BOOL status = NO; /* Create a new premptive client */ /*HTProfile_newNoCacheClient("libwww-POST", "1.0");*/ /* Set up TCP as transport */ HTTransport_add("buffered_tcp",HT_TP_SINGLE,HTReader_new,HTBufferWriter_new); /* Set up HTTP as protocol */ HTProtocol_add("http", "buffered_tcp", 80, NO, HTLoadHTTP, NULL); /* Setup MIME stream converters */ HTFormat_addConversion("message/rfc822","*/*",HTMIMEConvert,1.0,0.0,0.0); /* Setup HTTP protocol stream */ HTFormat_addConversion("text/x-http","*/*",HTTPStatus_new,1.0,0.0,0.0); /* Set up default event loop */ HTEventInit(); /* Need our own trace and print functions */ HTPrint_setCallback(printer); HTTrace_setCallback(tracer); /* Add our own filter to update the history list */ HTNet_addAfter(terminate_handler, NULL, NULL, HT_ALL, HT_FILTER_LAST); /* Handle command line args */ if (argc >= 3) { dst_str = argv[1]; data = argv[2]; } else { HTPrint("Type the URI of the destination you want to POST to and the contents that you want to post.\n"); HTPrint("\t%s <destination> <data>\n", argv[0]); HTPrint("For example, %s http://myserver/destination.html \"This is some testdata\"\n", argv[0]); return -1; } if (data && *data && dst_str && *dst_str) { HTPrint("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_HTML); /* ** 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)); HTRequest_setOutputStream(request, (HTStream *) HTStreamToChunk (request,&chunk,0)); /* POST the source to the dest */ status = HTPostAnchor(src,dst,request); /* Go into the event loop... */ if (status == YES) HTEventList_loop(request); } return 0; }
Received on Monday, 19 February 2001 12:27:37 UTC