wget可以使用用户设置文件".wgetrc"来读取很多设置,我们这里主要利用这个文件来是设置代理服务器
使用者用什么用户登录,那么什么用户主目录下的".wgetrc"文件就起作用。例如,"root"用户如果想使用".wgetrc"来设置代理服务
器,"/root/.wgetrc"就起作用。
http-proxy = 111.111.111.111:8080
ftp-proxy = 111.111.111.111:8080
这两行的含义是,代理服务器IP地址为:111.111.111.111,端口号为:8080。第一行指定HTTP协议所使用的代理服务器,第二行指定FTP协议所使用的代理服务器。
/* If the user did not specify a config, read the system wgetrc and ~/.wgetrc. */
如果注册进去后,用户不识别,那么就读~/.wgetrc文件自己写*/[code]
950 if (use_userconfig == false)
951 initialize (); 1、____---------->
[/code][code]
1、_________------------>
589 void
590 initialize (void)
591 {
592 char *file, *env_sysrc;
593 bool ok = true;
594
597 env_sysrc = getenv ("SYSTEM_WGETRC"); /*获得环境变量值*/
598 if (env_sysrc && file_exists_p (env_sysrc)) /*判断文件是否存在*/
599 ok &= run_wgetrc (env_sysrc); /*判断是否为致命的错误*/
600 601 #ifdef SYSTEM_WGETRC /*如果存在这个文件*/
602 else if (file_exists_p (SYSTEM_WGETRC))
603 ok &= run_wgetrc (SYSTEM_WGETRC); /*检查此文件中是否有fatal error*/
604 #endif
605
606 if (! ok) /*如果返回为0,那么就说明其中有fatal error"*/
608 {
609 fprintf (stderr, _("\
610 Parsing system wgetrc file failed, please check '%s'. \
611 Or specify a different file using --config\n"), SYSTEM_WGETRC);
612 exit (2); /*直接退出*/
613 }
614 /* Override it with your own, if one exists. */
615 file = wgetrc_file_name (); /*如果没有,那么就自己写入文件2、________------>*/
616 if (!file)
617 return;
620 #ifdef SYSTEM_WGETRC
621 if (!strcmp (file, SYSTEM_WGETRC))
622 {
623 fprintf (stderr, _("\
624 %s: Warning: Both system and user wgetrc point to %s.\n"),
625 exec_name, quote (file));
626 }
627 else
628 #endif
629 ok &= run_wgetrc (file);
630
632 if (!ok)
633 exit (2);
634
635 xfree (file);
636 return;
637 }
[/code][code]
2、___________---------------->
478 char *
479 wgetrc_file_name (void)
480 {
481 char *file = wgetrc_env_file_name (); 3、__________------------>
482 if (file && *file)
483 return file;
484
485 file = wgetrc_user_file_name ();5、__________-------->/*如果环境变量不存在,就查找在$Home/.wgetrc"返回它的路径如果它存在*/
[/code][code]
3、_________------------->
428 char *
429 wgetrc_env_file_name (void)
430 {
431 char *env = getenv ("WGETRC"); /*找到这个环境变量*/
432 if (env && *env)
433 {
434 if (!file_exists_p (env)) /*如果此文件不存在*/
435 {
436 fprintf (stderr, _("%s: WGETRC points to %s, which doesn't exist.\n"),
437 exec_name, env);
438 exit (1); /*就直接退出*/
439 }
440 return xstrdup (env); /*4、__________---------->/*初始化一个等同大小空间,元素为不可修改元素*/
441 }
442 return NULL;
443 }
4、_________------------>
112 void *
113 xmemdup (void const *p, size_t s)
114 {
115 return memcpy (xmalloc (s), p, s);
116 }
119
120 char *
121 xstrdup (char const *string)
122 {
123 return xmemdup (string, strlen (string) + 1);
124 }
[/code][code]
5、__________-------------->
447 char *
448 wgetrc_user_file_name (void)
449 {
450 char *home;
451 char *file = NULL;
452 /* If that failed, try $HOME/.wgetrc (or equivalent). */
453
454 #ifdef __VMS
455 file = "SYS$LOGIN:.wgetrc";
456 #else /* def __VMS */
457 home = home_dir (); /*6、____------>
458 if (home)
459 file = aprintf ("%s/.wgetrc", home);
460 xfree_null (home);
461 #endif /* def __VMS [else] */
462
463 if (!file)
464 return NULL;
465 if (!file_exists_p (file))
466 {
467 xfree (file);
468 return NULL;
469 }
470 return file;
471 }
[/code][code]
6、_________--------->
368 char *
369 home_dir (void)
370 {
371 static char *buf = NULL;
372 static char *home, *ret;
373 int len;
374
375 if (!home)
376 {
377 home = getenv ("HOME"); /*获得HOME的环境变量*/
378 if (!home)
379 {
380 #if defined(MSDOS) /*如果是MSDOS环境是不存在HOME的,此处略去。*/
381 /* Under MSDOS, if $HOME isn't defined, use the directory where
382 `wget.exe' resides. */
383 const char *_w32_get_argv0 (void); /* in libwatt.a/pcconfig.c */
384 char *p;
385
386 buff = _w32_get_argv0 (); /*这个是在dos环境下的*/
387
388 p = strrchr (buf, '/'); /* djgpp */
389 if (!p)
390 p = strrchr (buf, '\\'); /* others */
. . . . . .
402 #elif !defined(WINDOWS) /*略去*/
417 ret = home ? xstrdup (home) : NULL; /*如果home 存在就分配一个存储home的空间*/
418 if (buf)
419 free (buf);
420
421 return ret; /*返回*/
422 }
阅读(1073) | 评论(0) | 转发(0) |