El soporte de poderes con el paquete [ HTTP ] es aburrido y error propenso y tiene que ser hecho para cada uso alternadamente. He hecho algunos de �stos y finalmente decidido esto puede ser hecho por un paquete externo. Aqu� est� el segundo bosquejo. Para utilizar esto: el paquete requiere el autoproxy autoproxy::init autoproxy::configure - b�sico - luser del usuario - el tok determinado del sEkRet del paso [ http::geturl http://mini.net/tcl/autoproxy ] http::data $$tok http::cleanup $$tok he incorporado el c�digo de Thoyts de la palmadita en un proyecto y trabaja como un encanto. La �nica edici�n peque�a que es que no existe ProxyOverride al parecer siempre (seg�n un informe del problema que recib�) el -[jcw ] 11dec02 [ jcw ] - otro problema es que ProxyEnable puede existir pero no ser un boleano v�lido. [ PINTA ] 21Jan03: �Ululaci�n - esto se incluye en el starkit [ del gatito ]! Esto me ha motivado para revisitar este c�digo, para ponerlo en orden para arriba y para darle vuelta en un paquete apropiado. Tambi�n he tomado a bordo de los comentarios de Anders de abajo - aunque el punto verdadero del paquete del autoproxy es intentar tomar poder y los ajustes del usuario autom�ticamente. �Debe este extremo subir en tcllib?? ' ' ' el jefe de la autorizaci�n del poder de Automagic ' ' ' por Anders Ramdahl el filtro se cambia f�cilmente automagically para agregar un jefe de la autorizaci�n del poder cuando est� necesitado. Recuerde fijar ' ' el '' de autoproxy::user y ' ' '' de autoproxy::password antes de que la primera ' ' llamada del '' de http::geturl. el proc autoproxy::filter { anfitri�n } { no_proxy variable del usuario del poder variable variable variable de la contrase�a si { $$proxy(host) == { } } { vuelta { } } el dominio del foreach $$no_proxy { si { [ f�sforo ] $$domain $$host de la secuencia } { vuelta { } } } # agrega el h(Proxy-Authorization) determinado del arsenal del estado del estado del jefe de la autorizaci�n del poder _ h $_state(-headers) determinado upvar [ base del concat [ base64::encode $$user:$password ] ] fij� _ la vuelta de los state(-jefes) [ el arsenal consigue h ] [ lista $$proxy(host) $$proxy(port) ] } que esto fallar� si ' ' el '' de autoproxy::user o ' ' '' de autoproxy::password no se fija. Debo agregar probablemente una declaraci�n del ret�n en alguna parte. # autoproxy.tcl - la palmadita Thoyts < Pat.Thoyts@bigfoot.com > del copyright (c) 2002 # # en Unix un est�ndar que emerge para identificar el proxy server local del HTTP # se parece deber utilizar el http_proxy o el ftp_proxy de la variable de entorno y # no_proxy para enumerar esos dominios que se excluir�n de proxying. # # en Windows podemos recuperar los valores de los ajustes del Internet del registro # obtener bastante mucho la misma informaci�n. # # con esta informaci�n podemos setup un procedimiento conveniente del filtro para # paquete del HTTP del Tcl y arreglar para el uso autom�tico del poder. # # ejemplo: # el paquete requiere autoproxy # autoproxy::init # autoproxy::configure b�sico; # incorpore los valores en di�logo # fijan el tok [ http::getutl http://wiki.tcl.tk/] # http::data $$tok # # all� es un esqueleto para el resumen de soporte o la autorizaci�n de NTLM pero # esto no se apoya actualmente. No puedo encontrar un poder para probar el resumen # encendido y todav�a no tenemos una puesta en pr�ctica del Tcl para NTLM. # # winregkey determinado del winregkey variable eval del autoproxy del namespace de @(#)$Id: 2879,v 1.12 2003-01-27 09:00:22 jcw Exp $ $$Id: 2879,v 1.12 2003-01-27 09:00:22 jcw Exp $ { opciones variables de la versi�n 1,1 variables variables del rcsid { } si {! [ el Info existe las opciones ] } { opciones determinadas del arsenal ntlm b�sico del resumen del no_proxy del proxy_port 80 { del proxy_host "" { } { } { } { } } } [ ensamble { software Microsoft Windows CurrentVersion" ajustes de HKEY_CURRENT_USER del Internet "} \ \ ] } # # descripci�n: # obtenga las opciones de la configuraci�n para el servidor. # proc autoproxy::cget { opci�n } { las opciones variables cambian - glob -- $$option ] { - ho * - - proxy_h * { fije el options(proxy_host) } - po * - - proxy_p * { fije el options(proxy_port) } - no * { fije el options(no_proxy) } - b * { fije el options(basic) } - d * { fije el options(digest) } - NT * { fije el options(ntlm) } defecto { fije yerran [ ensamble [ lsort [ el arsenal nombra opciones ] ] ", - "] vuelta - el error" mal \"[lindex 0 ]\":\ $$args del c�digo de la opci�n debe ser uno de -$options "} } } # # descripci�n: # configure los ajustes del paquete del autoproxy. # usted puede configurar solamente un tipo de autorizaci�n a la vez como una vez que golpe�ramos # - b�sico, - resumen o - el ntlm - todos los otros args se pasa al protocolo # escritura espec�fica. # # por supuesto, la mayor�a del punto de este paquete debe llenar tanto de �stos # los campos como sea posible autom�ticamente. Usted debe llamar autoproxy::init # hace la configuraci�n autom�tica y despu�s llama este m�todo para refinar los detalles. # proc autoproxy::configure { args } { opciones variables si { == 0 $$args [ del llength ] } { foreach { valor del OPT } [ el arsenal consigue las opciones ] { lappend r -$opt $$value } vuelta $$r } mientras que { [ f�sforo de la secuencia "- *" [ lindex $$args 0 ] ] } { interruptor - glob -- [ lindex $$args 0 ] { - ho * - - proxy_h * { fije el options(proxy_host) [ args 1 del estallido ] } - po * - - proxy_p * { fije el options(proxy_port) [ args 1 ] } - no * { fije el options(no_proxy) [ args 1 del estallido ] } - b del estallido * { los args del estallido; configure:basic $$args; rotura } - d * { args del estallido; configure:digest $$args; rotura } - NT * { args del estallido; configure:ntlm $$args; rotura } -- { args del estallido; el defecto de la rotura } { fije yerran [ ensamble [ lsort [ el arsenal nombra opciones ] ] ", - "] vuelta - error" mal \"[lindex 0 ]\":\ $$args del c�digo de la opci�n debe ser uno de args del estallido de -$options "} } } } # # descripci�n: # inicialice la informaci�n del poder del HTTP del ambiente o # el registro (Win32) # # este procedimiento cargar� el paquete del HTTP y reescribe # m�todo de http::geturl a agregar en el jefe de la autorizaci�n. # # una soluci�n mejor de A ser� arreglar para que el paquete del HTTP solicite # llave de la autorizaci�n en la recepci�n de una autorizaci�n ma's reqest. # proc autoproxy::init { } { el paquete requiere winregkey variable del env global global del tcl_platform del uri que el no_proxy fijado las opciones variables { } fij� httpproxy { } # busca variables de entorno. si { [ el Info existe env(http_proxy) ] } { fije el no_proxy $$env(http_proxy) determinado del httpproxy $$env(no_proxy) } { si {) $$tcl_platform(platform == "ventanas" } { el paquete requiere el registro determinado del arsenal del registro 1,0 { ProxyEnable 0 ProxyServer "" ProxyOverride { } } ret�n otro { fije el reg(ProxyEnable) [ el registro consigue $$winregkey" ProxyEnable "] fijan el reg(ProxyServer) [ registro consiga $$winregkey" ProxyServer "] fijan el reg(ProxyOverride) [ el registro consigue $$winregkey" ProxyOverride "] } si { el![string es bool $$reg(ProxyEnable) ] } { fije el reg(ProxyEnable) 0 } si { $$reg(ProxyEnable) } { fije el no_proxy $$reg(ProxyServer) determinado del httpproxy $$reg(ProxyOverride) } } } # si encontramos algo... si { $$httpproxy! = { } } { # el http_proxy se supone para ser un URL - deja para cerciorarse de. si {![regexp { \w://.*} $$httpproxy ] } { fije el httpproxy "http://$httpproxy" } # descomponga la secuencia. el poder determinado del arsenal [ uri::split $$httpproxy ] # vuelta el valor del no_proxy en un no_proxy determinado de la lista del tcl [ mapa de la secuencia {;""," "} $$no_proxy ] # se configura configura - proxy_host $$proxy(host) \ - vuelta $$proxy(port) del proxy_port \ - $$no_proxy el no_proxy # setup y configura el paquete del paquete del HTTP requiere HTTP 2,0 http::config - del proxyfilter [ filtro del origen del namespace ] } $$httpproxy } # # descripci�n: # estallido el nth elemento de una lista. Utilizado en el proceso de las opciones. proc autoproxy::Pop { varname { nth 0 } } { los args $$varname upvar fijaron r [ lindex $$args $$nth ] fijaron vuelta de los args [ $$args $$nth $$nth lreplace ] $$r } # # descripci�n: # ayuda del instrumento para el esquema b�sico de la autentificaci�n (RFC 2617). # opciones: # - usuario userid - pase en la identificaci�n del usuario (mayo requiere dominio de Windows NT # como DOMAIN\\username) # - pwd de la contrase�a - pasan en la contrase�a del usuario. # el foreach del proc autoproxy::configure:basic { arglist } { el sistema variable del arsenal de las opciones opta { passwd del usuario { } { } } { valor } del OPT $$arglist { interruptor - glob -- $$opt { - u * { fije el opts(user) $$value } - p * { fije el opts(passwd) $$value } defecto { vuelta - cifre la opci�n inv�lida \"$opt del error "\": debe ser un de \ - username o - contrase�a "} } } # si no se proporcion� nada, asume que desean un aviso interactivo. si { $$opts(user) == { }||$$opts(passwd) == { } } { el paquete requiere BWidget que r determinado [ d de PasswdDlg - logintext $$opts(user) - passwdtext $$opts(passwd) ] fij� el opts(user) [ lindex $$r 0 ] fij� el opts(passwd) [ lindex $$r 1 ] } # nota: almacenamos solamente la contrase�a ' codificada '. Evite de guardar plaintext. el paquete requiere el options(basic) determinado base64 [ lista "" \ [" b�sico de la Poder-Autorizacio'n \ [ del concat "base64::encode $$opts(user):$opts(passwd) ] ] ] } # # descripci�n: # ayuda del instrumento para el esquema de la autentificaci�n del resumen (nnnn del RFC). # opciones: # - usuario userid - pase en la identificaci�n del usuario (mayo requiere dominio de Windows NT # como DOMAIN\\username) # - pwd de la contrase�a - pasan en la contrase�a del usuario. # - dominio del reino - el foreach del reino # del proc autoproxy::configure:digest { arglist } de la autorizaci�n { el sistema variable del arsenal de las opciones opta { reino del passwd del usuario { } { } { } } { valor } del OPT $$arglist { interruptor - glob -- $$opt { - u * { fije el opts(user) $$value } - p * { fije el opts(passwd) $$value } - r * { fije el opts(realm) $$value } defecto { vuelta - cifre la opci�n inv�lida \"$opt del error "\": debe ser un de \ - username, - reino o - contrase�a "} } } # si no se proporcion� nada, asume que desean un aviso interactivo. si { $$opts(user) == { }||$$opts(passwd) == { } } { el paquete requiere BWidget que r determinado [ d de PasswdDlg - "\ - $$opts(realm) del reino del t�tulo" logintext $$opts(user) \ - passwdtext $$opts(passwd) ] fij� el opts(user) [ lindex $$r 0 ] fij� el opts(passwd) [ lindex $$r 1 ] } # nota: almacenamos solamente la suma de comprobaci�n MD5 de la contrase�a. el paquete requiere md5 que A1 determinado [ md5::md5 "$$opts(user):$opts(realm):$opts(passwd)" ] fij� vuelta del options(digest) [ $$opts(user) $$opts(realm) $$A1 lista ] } # # descripci�n: # esquema de NTLM de Suport Microsoft # no hecho hasta ahora. # proc autoproxy::configure:ntlm { arglist } { vuelta variable de las opciones - cifre el error "autorizaci�n de NTLM no est� disponible" } # # descripci�n: # un filtro del poder del paquete del HTTP. Esto procura resolverse es una petici�n # debe ir v�a el poder configurado usando una comparaci�n del glob contra # los art�culos de la lista del no_proxy. Una lista t�pica del no_proxy pudo ser # [ el localhost de la lista * my.domain.com 127,0,0,1 ] # # si vamos a utilizar el poder - entonces inserta la autorizaci�n # el jefe del poder. # proc autoproxy::filter { anfitri�n } { opciones variables si { $$options(proxy_host) == { } } { vuelta { } } el dominio del foreach $$options(no_proxy) { si { [ f�sforo ] $$domain $$host de la secuencia } { la vuelta { } } } # agrega el jefe de la autorizaci�n al estado upvar del estado de la petici�n (por Anders Ramdahl) si { $$options(basic)! = { } } { fije State(-headers) [ concat $$options(basic) ] } elseif { $$options(digest)! = { } } { # F�JEME all� es m�s a digerir que esto # fij� State(-headers) [ linsert 0 $$options(digest) ] } vuelta [ lista $$options(proxy_host) $$options(proxy_port) ] } # el paquete proporciona autoproxy $$autoproxy::version # # # las variables locales: # modo: tcl # mellar-lengu!eta-modo: nada # extremo: [ [ [ Paquete De la Categor�a ]|[ Internet De la Categor�a ] ] ]