⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 htline.c

📁 www工具包
💻 C
📖 第 1 页 / 共 2 页
字号:
	    /* to -- Final representation */	    } else if (!strcmp(argv[arg], "-to")) {		HTFormat format = (arg+1 < argc && *argv[arg+1] != '-') ?		    HTAtom_for(argv[++arg]) : DEFAULT_FORMAT;		HTRequest_setOutputFormat(cl->request, format);	    /* destination for PUT, POST etc. */	    } else if (!strcmp(argv[arg], "-dest")) {		if (arg+1 < argc && *argv[arg+1] != '-') {		    char * dest = HTParse(argv[++arg], cl->cwd, PARSE_ALL);		    cl->dest = (HTParentAnchor *) HTAnchor_findAddress(dest);		    HT_FREE(dest);		}	    /* source please */	    } else if (!strcmp(argv[arg], "-source")) {		HTRequest_setOutputFormat(cl->request, WWW_RAW);	    /* log file */	    } else if (!strcmp(argv[arg], "-l")) {		cl->logfile = (arg+1 < argc && *argv[arg+1] != '-') ?		    argv[++arg] : DEFAULT_LOG_FILE;	    /* Max forward hops in case of TRACE request */	    } else if (!strcmp(argv[arg], "-hops") ||		       !strcmp(argv[arg], "-maxforwards")) {		int hops = (arg+1 < argc && *argv[arg+1] != '-') ?		    atoi(argv[++arg]) : DEFAULT_HOPS;		if (hops >= 0) HTRequest_setMaxForwards(cl->request, hops);	    /* automated authentication of format user:password@realm */	    } else if (!strncmp(argv[arg], "-auth", 5)) {		char * credentials = (arg+1 < argc && *argv[arg+1] != '-') ?		    argv[++arg] : NULL;		if (credentials) ParseCredentials(cl, credentials);	    /* rule file */	    } else if (!strcmp(argv[arg], "-r")) {		cl->rules = (arg+1 < argc && *argv[arg+1] != '-') ?		    argv[++arg] : DEFAULT_RULE_FILE;	    /* output filename */	    } else if (!strcmp(argv[arg], "-o")) { 		cl->outputfile = (arg+1 < argc && *argv[arg+1] != '-') ?		    argv[++arg] : DEFAULT_OUTPUT_FILE;	    /* timeout -- Change the default request timeout */	    } else if (!strcmp(argv[arg], "-timeout")) {		int timeout = (arg+1 < argc && *argv[arg+1] != '-') ?		    atoi(argv[++arg]) : DEFAULT_TIMEOUT;		if (timeout >= 1) cl->timer = timeout*MILLIES;	    /* preemptive or non-preemptive access */	    } else if (!strcmp(argv[arg], "-single")) {		HTRequest_setPreemptive(cl->request, YES);	    /* content Length Counter */	    } else if (!strcmp(argv[arg], "-cl")) { 		cl->flags |= CL_COUNT;	    /* print version and exit */	    } else if (!strcmp(argv[arg], "-version")) { 		VersionInfo(argv[0]);		Cleanup(cl, 0);	    /* run in quiet mode */	    } else if (!strcmp(argv[arg], "-q")) { 		cl->flags |= CL_QUIET;	    /* Start the persistent cache */	    } else if (!strcmp(argv[arg], "-cache")) {		cache = YES;	    /* Determine the cache root */	    } else if (!strcmp(argv[arg], "-cacheroot")) { 		cache_root = (arg+1 < argc && *argv[arg+1] != '-') ?		    argv[++arg] : NULL;	    /* Persistent cache flush */	    } else if (!strcmp(argv[arg], "-flush")) {		flush = YES;	    /* Do a cache validation */	    } else if (!strcmp(argv[arg], "-validate")) {		cl->flags |= CL_VALIDATE;	    /* Do an end-to-end cache-validation */	    } else if (!strcmp(argv[arg], "-endvalidate")) {		cl->flags |= CL_END_VALIDATE;#ifdef WWWTRACE	    /* trace flags */	    } else if (!strncmp(argv[arg], "-v", 2)) {		HTSetTraceMessageMask(argv[arg]+2);#endif	    /* GET method */	    } else if (!strcasecomp(argv[arg], "-get")) {		method = METHOD_GET;	    /* HEAD method */	    } else if (!strcasecomp(argv[arg], "-head")) {		method = METHOD_HEAD;	    /* DELETE method */	    } else if (!strcasecomp(argv[arg], "-delete")) {		method = METHOD_DELETE;	    /* POST Method */	    } else if (!strcasecomp(argv[arg], "-post")) {		method = METHOD_POST;	    /* PUT Method */	    } else if (!strcasecomp(argv[arg], "-put")) {		method = METHOD_PUT;	    /* OPTIONS Method */	    } else if (!strcasecomp(argv[arg], "-options")) {		method = METHOD_OPTIONS;	    /* TRACE Method */	    } else if (!strcasecomp(argv[arg], "-trace")) {		method = METHOD_TRACE;	    } else {		if (SHOW_MSG) HTPrint("Bad Argument (%s)\n", argv[arg]);	    }	} else {	 /* If no leading `-' then check for URL or keywords */    	    if (!tokencount) {		char * ref = HTParse(argv[arg], cl->cwd, PARSE_ALL);		cl->anchor = (HTParentAnchor *) HTAnchor_findAddress(ref);		tokencount = 1;		HT_FREE(ref);	    } else if (formdata) {		   /* Keywords are form data */		char * string = argv[arg];		if (tokencount++ <= 1) formfields = HTAssocList_new();		HTParseFormInput(formfields, string);	    } else {		   	       /* keywords are search tokens */		char * escaped = HTEscape(argv[arg], URL_XALPHAS);		if (tokencount++ <= 1)		    keywords = HTChunk_new(128);		else		    HTChunk_putc(keywords, ' ');		HTChunk_puts(keywords, HTStrip(escaped));		HT_FREE(escaped);	    }	}    }    if (!tokencount && !cl->flags & CL_FILTER) {	VersionInfo(argv[0]);	Cleanup(cl, 0);    }    /* Should we use persistent cache? */    if (cache) {	HTCacheInit(cache_root, 20);	/* Should we start by flushing? */	if (flush) HTCache_flushAll();    }    /*    ** Check whether we should do some kind of cache validation on    ** the load    */    if (cl->flags & CL_VALIDATE)	HTRequest_setReloadMode(cl->request, HT_CACHE_VALIDATE);    if (cl->flags & CL_END_VALIDATE)	HTRequest_setReloadMode(cl->request, HT_CACHE_END_VALIDATE);    /* Add progress notification */    if (cl->flags & CL_QUIET) HTAlert_deleteOpcode(HT_A_PROGRESS);    /* Output file specified? */    if (cl->outputfile) {	if ((cl->output = fopen(cl->outputfile, "wb")) == NULL) {	    if (SHOW_MSG) HTPrint("Can't open `%s'\\n",cl->outputfile);	    cl->output = OUTPUT;	}    }    /*    ** Set up the output. Even though we don't use this explicit, it is    ** required in order to show the stream stack that we know that we are    ** getting raw data output on the output stream of the request object.    */    HTRequest_setOutputStream(cl->request,			      HTFWriter_new(cl->request, cl->output, YES));    /* Setting event timeout */    HTHost_setEventTimeout(cl->timer);    /*    ** Make sure that the first request is flushed immediately and not    ** buffered in the output buffer    */    HTRequest_setFlush(cl->request, YES);    /* Log file specifed? */    if (cl->logfile) {	cl->log = HTLog_open(cl->logfile, YES, YES);        if (cl->log) HTNet_addAfter(HTLogFilter, NULL, cl->log, HT_ALL, HT_FILTER_LATE);    }    /* Just convert formats */    if (cl->flags & CL_FILTER) {#ifdef STDIN_FILENO	HTRequest_setAnchor(cl->request, (HTAnchor *) cl->anchor);	HTRequest_setPreemptive(cl->request, YES);	HTLoadSocket(STDIN_FILENO, cl->request);#endif	Cleanup(cl, 0);    }        /* Content Length Counter */    if (cl->flags & CL_COUNT) {	HTRequest_setOutputStream(cl->request,				  HTContentCounter(HTBlackHole(),						   cl->request, 0x2000));    }    /* Rule file specified? */    if (cl->rules) {	char * rules = HTParse(cl->rules, cl->cwd, PARSE_ALL);	if (!HTLoadRulesAutomatically(rules))	    if (SHOW_MSG) HTPrint("Can't access rules\n");	HT_FREE(rules);    }    /* Add our own filter to update the history list */    HTNet_addAfter(terminate_handler, NULL, NULL, HT_ALL, HT_FILTER_LAST);    /* Start the request */    switch (method) {    case METHOD_GET:	if (formdata)	    status = HTGetFormAnchor(formfields, (HTAnchor *) cl->anchor,				     cl->request);	else if (keywords)	    status = HTSearchAnchor(keywords, (HTAnchor *) cl->anchor,				    cl->request);	else	    status = HTLoadAnchor((HTAnchor *) cl->anchor, cl->request);	break;    case METHOD_HEAD:	if (formdata) {	    HTRequest_setMethod(cl->request, METHOD_HEAD);	    status = HTGetFormAnchor(formfields, (HTAnchor *) cl->anchor,				     cl->request);	} else if (keywords) {	    HTRequest_setMethod(cl->request, METHOD_HEAD);	    status = HTSearchAnchor(keywords, (HTAnchor *) cl->anchor,				    cl->request);	} else	    status = HTHeadAnchor((HTAnchor *) cl->anchor, cl->request);	break;    case METHOD_DELETE:	status = HTDeleteAnchor((HTAnchor *) cl->anchor, cl->request);	break;    case METHOD_POST:	if (formdata) {	    HTParentAnchor * posted = NULL;#if 1	    posted = HTPostFormAnchor(formfields, (HTAnchor *) cl->anchor,				      cl->request);	    status = posted ? YES : NO;#else	    /* If we want output to a chunk instead */	    post_result = HTPostFormAnchorToChunk(formfields, (HTAnchor *) cl->anchor,						  cl->request);	    status = post_result ? YES : NO;#endif	} else {	    if (SHOW_MSG) HTPrint("Nothing to post to this address\n");	    status = NO;	    	}	break;    case METHOD_PUT:	status = HTPutDocumentAnchor(cl->anchor, (HTAnchor *) cl->dest,				     cl->request);	break;    case METHOD_OPTIONS:	status = HTOptionsAnchor((HTAnchor *) cl->anchor, cl->request);	break;	    case METHOD_TRACE:	status = HTTraceAnchor((HTAnchor *) cl->anchor, cl->request);	break;	    default:	if (SHOW_MSG) HTPrint("Don't know this method\n");	break;    }    if (keywords) HTChunk_delete(keywords);    if (formfields) HTAssocList_delete(formfields);    if (status != YES) {	if (SHOW_MSG) HTPrint("Sorry, can't access resource\n");	Cleanup(cl, -1);    }    /* Go into the event loop... */    HTEventList_loop(cl->request);    /* Only gets here if event loop fails */    Cleanup(cl, 0);    return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -