buildz 0.6.58__tar.gz → 0.6.59__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {buildz-0.6.58/buildz.egg-info → buildz-0.6.59}/PKG-INFO +1 -1
- {buildz-0.6.58 → buildz-0.6.59}/buildz/__init__.py +1 -1
- {buildz-0.6.58 → buildz-0.6.59}/buildz/netz/mhttp/__init__.py +1 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/netz/mhttp/caps.py +6 -28
- buildz-0.6.59/buildz/netz/mhttp/gateway.py +90 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/netz/mhttp/mhttp.py +23 -15
- buildz-0.6.59/buildz/netz/mhttp/mhttps.py +28 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/netz/mhttp/proxy.py +32 -13
- buildz-0.6.59/buildz/netz/test/test_gw.py +33 -0
- {buildz-0.6.58 → buildz-0.6.59/buildz.egg-info}/PKG-INFO +1 -1
- {buildz-0.6.58 → buildz-0.6.59}/buildz.egg-info/SOURCES.txt +3 -0
- {buildz-0.6.58 → buildz-0.6.59}/setup.py +1 -1
- {buildz-0.6.58 → buildz-0.6.59}/LICENSE +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/MANIFEST.in +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/README.md +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/__main__.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/argx.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/argz/__init__.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/argz/argz.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/argz/callz.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/argz/conf_argz.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/argz/conf_callz.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/argz/evalx.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/argz/init.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/argz/test.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/argz/test_call.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/argz_bk/__init__.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/argz_bk/argz.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/argz_bk/build.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/argz_bk/callz.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/argz_bk/evalx.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/argz_bk/test.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/argz_bk/test_obj.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/argz_bk/tests/conf.js +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/argz_bk/testx.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/auto/__init__.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/auto/cache.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/auto/config.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/auto/dbs.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/auto/deal.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/auto/deal_list.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/auto/deal_type.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/auto/defs.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/auto/factory.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/auto/init.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/auto/log.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/auto/request.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/auto/run.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/auto/save.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/auto/test/res/cache/cache.js +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/auto/test/res/config/base.js +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/auto/test/res/config/config.js +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/auto/test/res/data/fp.js +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/auto/test/res/data/item1.js +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/auto/test/res/data/item2.js +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/auto/test/res/data/test.js +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/auto/test/test.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/auto/test/xtest.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/auto/verify.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/base.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/cachez/__init__.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/cachez/cache.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/cmd.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/confz.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/db/__init__.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/db/__main__.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/db/dv/__init__.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/db/dv/basez.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/db/dv/clickhousez.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/db/dv/lib/readme +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/db/dv/mysqlz.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/db/dv/oraclez.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/db/dv/orm.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/db/dv/postgresqlz.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/db/dv/sqlite3z.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/db/dv/structz.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/db/install.txt +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/db/run.conf +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/db/runz.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/db/tls.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/demo/ioc/deal.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/demo/ioc/help.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/demo/myers/deal.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/demo/myers/help.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/demo/res/conf/ioc.js +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/demo/res/conf/main.js +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/demo/res/conf/myers.js +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/demo/res/conf/search.js +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/demo/res/conf/xf.js +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/demo/res/help/default.js +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/demo/res/help/ioc.js +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/demo/res/help/myers.js +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/demo/res/help/search.js +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/demo/res/help/xf.js +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/demo/res/test.js +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/demo/search/deal.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/demo/search/help.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/demo/test.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/demo/xf/deal.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/demo/xf/help.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/dz/__init__.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/dz/mapz.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/evalz/__init__.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/evalz/evalz.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/evalz/res/default.js +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/evalz/test.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/fz/__init__.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/fz/dirz.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/fz/fhs.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/fz/fio.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/fz/lsf.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/html/__init__.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/html/test/demo.html +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/html/test/test.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/html/xml.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/__init__.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/base.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/init.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc/base.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc/conf.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc/confs.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc/decorator.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc/loads.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc/single.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/base.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/branch.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/call.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/calls.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/conf/branch_lists.js +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/conf/call_defaults.js +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/conf/call_lists.js +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/conf/calls_defaults.js +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/conf/calls_lists.js +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/conf/deal_lists.js +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/conf/deals.js +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/conf/env_lists.js +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/conf/ioc_lists.js +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/conf/iocf_lists.js +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/conf/join_lists.js +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/conf/list_lists.js +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/conf/map_lists.js +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/conf/mcall_defaults.js +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/conf/mcall_lists.js +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/conf/obj_cst_lists.js +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/conf/obj_defaults.js +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/conf/obj_lists.js +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/conf/obj_set_lists.js +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/conf/ovar_lists.js +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/conf/ref_lists.js +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/conf/refs_lists.js +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/conf/var_lists.js +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/conf/xfile_defaults.js +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/conf/xfile_lists.js +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/deal.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/demo.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/env.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/init.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/ioc.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/iocf.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/join.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/list.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/map.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/mcall.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/obj.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/ovar.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/ref.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/refs.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/val.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/var.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/xfile.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/wrap.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/__init__.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/base.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/conf/base.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/conf/conf.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/conf/mg.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/conf/unit.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/conf/up.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/conf_deal/attr.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/conf_deal/base.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/conf_deal/call.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/conf_deal/cvar.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/conf_deal/deal.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/conf_deal/env.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/conf_deal/ioc.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/conf_deal/method.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/conf_deal/obj.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/conf_deal/ref.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/conf_deal/val.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/init.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/ioc/__init__.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/ioc/base.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/ioc/builds.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/ioc/confs.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/ioc/datas.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/ioc/dataset.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/ioc/encapes.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/ioc/envs.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/ioc/ids.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/ioc/init.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/ioc/mg.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/ioc/single.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/ioc/sys_envs.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/ioc/tdata.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/ioc/tdict.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/ioc/unit.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/ioc/vars.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/ioc_deal/base.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/ioc_deal/deal.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/ioc_deal/ioc.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/ioc_deal/obj.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/ioc_deal/ref.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/ioc_deal/val.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/test/test.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/wrap/base.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/wrap/default_wraps.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/wrap/env.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/wrap/obj.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/wrap/wraps.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/logz.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/netz/__init__.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/netz/mhttp/record.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/netz/sslz/__init__.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/netz/sslz/gen.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/netz/sslz/gen.pyi +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/netz/test/__main__.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/netz/test/test.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/netz/test/test_cli.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/pathz.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/pyz.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/tls.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/tools.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/tz/__init__.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/tz/myers_diff.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/tz/test_xfind.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/tz/time/__init__.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/tz/time/timez.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/tz/tio/__init__.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/tz/tio/base.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/tz/tio/getch.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/tz/tio/lx.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/tz/tio/test.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/tz/tio/win.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/tz/xfind.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/__init__.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/__main__.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/base.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/code.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/code_modify.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/copy_old.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/file.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loader/base.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loader/buffer.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loader/deal/listz.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loader/deal/lr.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loader/deal/lrval.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loader/deal/mapz.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loader/deal/nextz.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loader/deal/reval.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loader/deal/setz.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loader/deal/spc.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loader/deal/spt.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loader/deal/strz.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loader/exp.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loader/item.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loader/mg.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loader/pos.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz/base.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz/buffer.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz/deal/listmapz.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz/deal/listz.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz/deal/lr.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz/deal/lrval.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz/deal/mapz.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz/deal/nextz.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz/deal/reval.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz/deal/setz.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz/deal/spc.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz/deal/spt.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz/deal/strz.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz/deal/strz_new.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz/deal/strz_old.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz/exp.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz/item.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz/mg.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz/pos.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz/test.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz/test1.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz_nexp/base.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz_nexp/buffer.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz_nexp/deal/listmapz.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz_nexp/deal/listz.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz_nexp/deal/lr.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz_nexp/deal/lrval.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz_nexp/deal/mapz.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz_nexp/deal/nextz.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz_nexp/deal/reval.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz_nexp/deal/setz.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz_nexp/deal/spc.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz_nexp/deal/spt.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz_nexp/deal/strz.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz_nexp/deal/strz_new.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz_nexp/deal/strz_old.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz_nexp/exp.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz_nexp/item.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz_nexp/mg.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz_nexp/pos.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz_nexp/test.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz_nexp/test1.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/mapz.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/read.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/readz.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/readz_nexp.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/stack.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/write.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/writer/base.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/writer/conf.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/writer/deal/jsonval.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/writer/deal/listmapz.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/writer/deal/listz.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/writer/deal/mapz.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/writer/deal/reval.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/writer/deal/strz.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/writer/itemz.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/writer/mg.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/writerz/base.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/writerz/conf.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/writerz/deal/jsonval.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/writerz/deal/listmapz.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/writerz/deal/listz.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/writerz/deal/mapz.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/writerz/deal/reval.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/writerz/deal/strz.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/writerz/itemz.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/writerz/mg.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/writerz/test.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/writerz/testx.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/writez.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/xargs.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xz/__init__.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xz/conf.js +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xz/data.js +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xz/test.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz/xz/trs.py +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz.egg-info/dependency_links.txt +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/buildz.egg-info/top_level.txt +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/notes/notes.txt +0 -0
- {buildz-0.6.58 → buildz-0.6.59}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: buildz
|
3
|
-
Version: 0.6.
|
3
|
+
Version: 0.6.59
|
4
4
|
Summary: 配置读写(基于json格式进行简化)、ioc、以及其他工具代码。a json-base file format's read and write code by python, and codes to read and product object from configure file in such format(ioc), and other tool codes
|
5
5
|
Home-page: https://github.com/buildCodeZ/buildz
|
6
6
|
Author: Zzz
|
@@ -1,5 +1,5 @@
|
|
1
1
|
|
2
|
-
from . import proxy,mhttp
|
2
|
+
from . import proxy,mhttp,mhttps
|
3
3
|
import socket, threading
|
4
4
|
log = mhttp.log
|
5
5
|
from buildz import xf
|
@@ -72,9 +72,7 @@ class CapsDealer(proxy.ProxyDealer):
|
|
72
72
|
def context(self, hostname):
|
73
73
|
if hostname not in self.contexts:
|
74
74
|
fp_cert, fp_prv, pwd = self.sign(hostname)
|
75
|
-
|
76
|
-
context.load_cert_chain(fp_cert, fp_prv, password=pwd)
|
77
|
-
self.contexts[hostname]=context
|
75
|
+
self.contexts[hostname]=mhttps.load_server_context(fp_cert, fp_prv, pwd)
|
78
76
|
return self.contexts[hostname]
|
79
77
|
def deal_channel(self, skt_cli, skt_srv):
|
80
78
|
#self.wskt.closefile()
|
@@ -92,7 +90,7 @@ class CapsDealer(proxy.ProxyDealer):
|
|
92
90
|
line, headers, data_size = mhttp.http_recv(skt_cli)
|
93
91
|
if line is None:
|
94
92
|
continue
|
95
|
-
self.
|
93
|
+
self.deals[None](skt_cli, line, headers, data_size, skt_srv)
|
96
94
|
except Exception as exp:
|
97
95
|
log.debug(f"channel exp: {exp}")
|
98
96
|
log.warn(f"traceback: {traceback.format_exc()}")
|
@@ -110,29 +108,9 @@ class CapsProxy(proxy.Proxy):
|
|
110
108
|
# context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
|
111
109
|
# context.load_cert_chain(fp_sign, fp_prv, password=password)
|
112
110
|
self.ca = fp_sign, fp_prv, password
|
113
|
-
|
114
|
-
# 导入根证书,需要单个根证书文件cafile或者根证书文件夹capath或者根证书数据cadata
|
115
|
-
# cadata是证书数据,不清楚能不能多个证书字节码拼在一起
|
116
|
-
srv_context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
|
117
|
-
srv_context.load_verify_locations(cafile=cafile, capath=capath, cadata=cadata)
|
118
|
-
srv_context.check_hostname = check_hostname
|
119
|
-
else:
|
120
|
-
# 不会校验服务端https证书是否有效,可能有风险?
|
121
|
-
srv_context = ssl._create_unverified_context(ssl.PROTOCOL_TLS_CLIENT)
|
122
|
-
#self.context = context
|
123
|
-
self.srv_context = srv_context
|
111
|
+
self.srv_context = mhttps.load_verify_context(cafile, capath, cadata,check_hostname)
|
124
112
|
if dp_cache is None:
|
125
113
|
dp_cache = "./res/certs"
|
126
114
|
self.dp_cache = dp_cache
|
127
|
-
def
|
128
|
-
self.
|
129
|
-
skt = socket.socket()
|
130
|
-
skt.bind(self.addr)
|
131
|
-
skt.listen(self.listen)
|
132
|
-
self.skt = skt
|
133
|
-
while self.running:
|
134
|
-
skt,addr = self.skt.accept()
|
135
|
-
deal = CapsDealer(skt, self.ca, self.srv_context, record=self.record.clone(), dp_cache = self.dp_cache)
|
136
|
-
th = threading.Thread(target=deal,daemon=True)
|
137
|
-
th.start()
|
138
|
-
self.ths.append(th)
|
115
|
+
def make_dealer(self, skt, addr):
|
116
|
+
return CapsDealer(skt, self.ca, self.srv_context, record=self.record.clone(), dp_cache = self.dp_cache)
|
@@ -0,0 +1,90 @@
|
|
1
|
+
|
2
|
+
from . import proxy,mhttp, mhttps
|
3
|
+
import socket, threading
|
4
|
+
log = mhttp.log
|
5
|
+
from buildz import xf
|
6
|
+
import ssl,re
|
7
|
+
from os.path import join, isfile
|
8
|
+
import traceback
|
9
|
+
from ...iocz.conf import conf as confz
|
10
|
+
from ... import dz
|
11
|
+
class GWDealer(proxy.ProxyDealer):
|
12
|
+
conf = confz.Conf()
|
13
|
+
conf.ikey(0, 'match', need=1)
|
14
|
+
conf.ikey(1, 'replace', need=1)
|
15
|
+
conf.ikey(2, 'ssl')
|
16
|
+
conf.ikey(3, 'type', 'match_type,http_type'.split(","))
|
17
|
+
"""
|
18
|
+
rules:[
|
19
|
+
[match, replace, [opt|ssl], [opt|match_type]]
|
20
|
+
{match=match, replace=relace, ssl=false, match_type='GET'}
|
21
|
+
]
|
22
|
+
"""
|
23
|
+
def init(self, skt, rules, verify_context, context, channel_read_size=1024000, record=None):
|
24
|
+
self.context = context
|
25
|
+
if context is not None:
|
26
|
+
skt = context.wrap_socket(skt, server_side=True)
|
27
|
+
rules = [self.conf(k)[0] for k in rules]
|
28
|
+
self.rules = rules
|
29
|
+
self.verify_context = verify_context
|
30
|
+
super().init(skt, channel_read_size, record=record, default_deal = self.maps_deal)
|
31
|
+
def match(self, line, headers):
|
32
|
+
http_type, url, protocol = line
|
33
|
+
for item in self.rules:
|
34
|
+
pt, rep, mark_ssl, match_type = dz.g(item, match=None, replace=None, ssl=False, type=http_type)
|
35
|
+
if match_type != http_type:
|
36
|
+
continue
|
37
|
+
rst = re.findall(pt, url)
|
38
|
+
if len(rst)==0:
|
39
|
+
continue
|
40
|
+
match = rst[0]
|
41
|
+
i = url.find(match)
|
42
|
+
pfx, sfx = url[:i], url[i+len(match):]
|
43
|
+
rurl = pfx+rep+sfx
|
44
|
+
log.debug(f"url match: {rst} for {url}, replace to {rurl} with i={i}")
|
45
|
+
return rurl, mark_ssl
|
46
|
+
return None, False
|
47
|
+
def ssl_connect(self, addr):
|
48
|
+
return mhttps.wrap(self.verify_context, mhttp.WSocket.Connect(addr), False)
|
49
|
+
def maps_deal(self, skt_cli, line, headers, data_size, skt=None):
|
50
|
+
http_type, url, protocol = line
|
51
|
+
rel_url, mark_ssl = self.match(line, headers)
|
52
|
+
if rel_url is None:
|
53
|
+
if data_size>0:
|
54
|
+
data = skt_cli.read(data_size)
|
55
|
+
if mhttp.check_chunked(headers):
|
56
|
+
self.simple_chunked(skt_cli)
|
57
|
+
return self.error(skt_cli)
|
58
|
+
if mark_ssl:
|
59
|
+
prev = "https"
|
60
|
+
else:
|
61
|
+
prev = "http"
|
62
|
+
host = rel_url.split("?")[0].split("/")[0]
|
63
|
+
rel_url = prev+"://"+rel_url
|
64
|
+
for key in "Host,Origin".split(","):
|
65
|
+
if key in headers:
|
66
|
+
headers[key] = host
|
67
|
+
if 'Referer' in headers:
|
68
|
+
ref = headers['Referer']
|
69
|
+
prev, src_host, path = mhttp.spt_url(ref)
|
70
|
+
ref = mhttp.comb_url(prev, host, path)
|
71
|
+
headers["Referer"] = ref
|
72
|
+
log.info(f"[REF] host: {host}, ref: {ref}")
|
73
|
+
line = http_type, rel_url, protocol
|
74
|
+
fc_connect = None
|
75
|
+
if mark_ssl:
|
76
|
+
fc_connect = self.ssl_connect
|
77
|
+
return self.default_deal(skt_cli, line, headers, data_size, skt, fc_connect)
|
78
|
+
|
79
|
+
|
80
|
+
class Gateway(proxy.Proxy):
|
81
|
+
'''
|
82
|
+
类似nginx的前向代理
|
83
|
+
'''
|
84
|
+
def init(self, addr, rules, fp_cert=None, fp_prv=None, password = None,listen=5, record=None, cafile=None, capath=None, cadata=None,check_hostname=True):
|
85
|
+
super().init(addr, listen, record)
|
86
|
+
self.rules = rules
|
87
|
+
self.verify_context = mhttps.load_verify_context(cafile, capath, cadata,check_hostname)
|
88
|
+
self.context = None if fp_cert is None else mhttps.load_server_context(fp_cert, fp_prv, password)
|
89
|
+
def make_dealer(self, skt, addr):
|
90
|
+
return GWDealer(skt, self.rules, self.verify_context, self.context, record=self.record.clone())
|
@@ -62,17 +62,21 @@ def http_decode(line):
|
|
62
62
|
#log.debug(f"http_docde: {a,b,c}")
|
63
63
|
return a,b,c.strip()
|
64
64
|
pass
|
65
|
-
def
|
65
|
+
def spt_url(url):
|
66
66
|
index = url.find("://")
|
67
67
|
prev = url[:index]
|
68
68
|
url = url[index+3:]
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
url = url
|
73
|
-
|
74
|
-
|
75
|
-
|
69
|
+
addr = url.split("?")[0].split("/")[0]
|
70
|
+
url = url[len(addr):]
|
71
|
+
if len(url)==0 or url[0]!="/":
|
72
|
+
url = "/"+url
|
73
|
+
return prev, addr, url
|
74
|
+
|
75
|
+
pass
|
76
|
+
def comb_url(prev, addr, url):
|
77
|
+
return prev+"://"+addr+url
|
78
|
+
def http_encode_send(http_type, url, headers=None, data_size=0, protocol = "HTTP/1.1"):
|
79
|
+
prev, addr, url = spt_url(url)
|
76
80
|
addrs = addr.split(":")
|
77
81
|
ip = addrs[0]
|
78
82
|
if prev.upper()=="HTTP":
|
@@ -171,20 +175,24 @@ class SendDone(Base):
|
|
171
175
|
if not self.to_rel:
|
172
176
|
return
|
173
177
|
self.skt.close()
|
174
|
-
def http_send_head(http_type, url, headers=None, data_size=0,protocol='HTTP/1.1', skt=None, caches=None):
|
178
|
+
def http_send_head(http_type, url, headers=None, data_size=0,protocol='HTTP/1.1', skt=None, caches=None, fc_connect=None):
|
175
179
|
if caches is None:
|
176
180
|
caches = {}
|
177
181
|
bts, addr,keep_alive = http_encode_send(http_type, url, headers, data_size,protocol=protocol)
|
182
|
+
pfx = spt_url(url)[0].lower()
|
183
|
+
if fc_connect is None:
|
184
|
+
fc_connect = WSocket.Connect
|
178
185
|
#log.debug(f"request addr: {addr}")
|
179
186
|
#log.debug(f"http_send: {len(bts)}")
|
180
187
|
retry=0
|
181
188
|
use_caches=skt is None and keep_alive
|
182
189
|
need_rel = keep_alive
|
190
|
+
addr_key = tuple([pfx]+list(addr))
|
183
191
|
if skt is None:
|
184
|
-
if not keep_alive or
|
185
|
-
skt =
|
186
|
-
|
187
|
-
skt = caches[
|
192
|
+
if not keep_alive or addr_key not in caches:
|
193
|
+
skt = fc_connect(addr)
|
194
|
+
else:
|
195
|
+
skt = caches[addr_key]
|
188
196
|
retry=1
|
189
197
|
else:
|
190
198
|
need_rel=False
|
@@ -193,12 +201,12 @@ def http_send_head(http_type, url, headers=None, data_size=0,protocol='HTTP/1.1'
|
|
193
201
|
skt.send(bts)
|
194
202
|
except:
|
195
203
|
if retry:
|
196
|
-
skt=
|
204
|
+
skt=fc_connect(addr)
|
197
205
|
skt.send(bts)
|
198
206
|
else:
|
199
207
|
raise
|
200
208
|
if use_caches:
|
201
|
-
caches[
|
209
|
+
caches[addr_key]=skt
|
202
210
|
return skt,fc_done
|
203
211
|
|
204
212
|
class HttpMonitor(Base):
|
@@ -0,0 +1,28 @@
|
|
1
|
+
#
|
2
|
+
|
3
|
+
import ssl
|
4
|
+
from . import mhttp
|
5
|
+
|
6
|
+
def load_verify_context(cafile=None, capath=None, cadata=None,check_hostname=True):
|
7
|
+
if cafile is not None or capath is not None or cadata is not None:
|
8
|
+
# 导入根证书,需要单个根证书文件cafile或者根证书文件夹capath或者根证书数据cadata
|
9
|
+
# cadata是证书数据,不清楚能不能多个证书字节码拼在一起
|
10
|
+
srv_context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
|
11
|
+
srv_context.load_verify_locations(cafile=cafile, capath=capath, cadata=cadata)
|
12
|
+
srv_context.check_hostname = check_hostname
|
13
|
+
else:
|
14
|
+
# 不会校验服务端https证书是否有效,可能有风险?
|
15
|
+
srv_context = ssl._create_unverified_context(ssl.PROTOCOL_TLS_CLIENT)
|
16
|
+
return srv_context
|
17
|
+
|
18
|
+
pass
|
19
|
+
|
20
|
+
def load_server_context(fp_cert, fp_prv, pwd=None):
|
21
|
+
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
|
22
|
+
context.load_cert_chain(fp_cert, fp_prv, password=pwd)
|
23
|
+
return context
|
24
|
+
|
25
|
+
def wrap(context, wrap_cli, server_side, is_wrap = True):
|
26
|
+
if is_wrap:
|
27
|
+
wrap_cli = wrap_cli.skt
|
28
|
+
return mhttp.WSocket.Bind(context.wrap_socket(wrap_cli, server_side=server_side))
|
@@ -8,29 +8,36 @@ class ProxyDealer(Base):
|
|
8
8
|
"""
|
9
9
|
http和https代理
|
10
10
|
"""
|
11
|
-
def init(self, skt, channel_read_size=1024000, record=None, protocol = "HTTP/1.1"):
|
11
|
+
def init(self, skt, channel_read_size=1024000, record=None, protocol = "HTTP/1.1", default_deal=None):
|
12
12
|
self.wskt = mhttp.WSocket.Bind(skt)
|
13
13
|
self.channel_read_size = channel_read_size
|
14
14
|
self.deals = {}
|
15
|
-
|
15
|
+
if default_deal is None:
|
16
|
+
default_deal = self.default_deal
|
17
|
+
self.deals[None] = default_deal
|
16
18
|
self.deals['CONNECT'] = self.connect_deal
|
17
19
|
self.skts = {}
|
18
20
|
self.protocol = protocol
|
19
21
|
if record is None:
|
20
22
|
record = _record.MsgLog(log)
|
21
23
|
self.record = record
|
22
|
-
def simple_chunked(self, skt_read, skt_send):
|
24
|
+
def simple_chunked(self, skt_read, skt_send=None):
|
23
25
|
while True:
|
24
26
|
n, dt = mhttp.chunked_data(skt_read)
|
25
27
|
self.record.add_chunk(dt)
|
26
28
|
bts = mhttp.chunked_encode(dt)
|
27
|
-
skt_send
|
29
|
+
if skt_send is not None:
|
30
|
+
skt_send.send(bts)
|
28
31
|
if n==0:
|
29
32
|
break
|
30
|
-
def
|
33
|
+
def do_connect(self, addr):
|
34
|
+
return mhttp.WSocket.Connect(addr)
|
35
|
+
def default_deal(self, skt_cli, line, headers, data_size, skt=None, fc_connect=None):
|
36
|
+
if fc_connect is None:
|
37
|
+
fc_connect = self.do_connect
|
31
38
|
self.record.request(line, headers, data_size)
|
32
39
|
http_type, url, protocol = line
|
33
|
-
skt,fc_done = mhttp.http_send_head(http_type, url, headers, data_size,protocol, skt, self.skts)
|
40
|
+
skt,fc_done = mhttp.http_send_head(http_type, url, headers, data_size,protocol, skt, self.skts, fc_connect)
|
34
41
|
if data_size>0:
|
35
42
|
data = skt_cli.read(data_size)
|
36
43
|
skt.send(data)
|
@@ -42,6 +49,7 @@ class ProxyDealer(Base):
|
|
42
49
|
self.record.response(line, headers, data_size)
|
43
50
|
protocol, code, rsp_text = line
|
44
51
|
bts = mhttp.http_encode_rsp(code, rsp_text, headers, data_size, protocol)
|
52
|
+
print(f"[TESTZ] bts send: {bts}")
|
45
53
|
skt_cli.send(bts)
|
46
54
|
if data_size>0:
|
47
55
|
data = skt.read(data_size)
|
@@ -58,6 +66,14 @@ class ProxyDealer(Base):
|
|
58
66
|
skt.close()
|
59
67
|
except:
|
60
68
|
pass
|
69
|
+
def error(self, skt_cli, code=404, txt="Not Found", data=None):
|
70
|
+
if data is None:
|
71
|
+
data = txt
|
72
|
+
if type(data)==str:
|
73
|
+
data = data.encode("utf-8")
|
74
|
+
bts = mhttp.http_encode_rsp(code, txt, data_size=len(data), protocol = self.protocol)
|
75
|
+
skt_cli.send(bts+data)
|
76
|
+
log.debug(f"error: {code}, txt={txt}")
|
61
77
|
def connect_deal(self, skt_cli, line, headers, data_size, skt=None):
|
62
78
|
self.record.request(line, headers, data_size)
|
63
79
|
if data_size>0:
|
@@ -78,14 +94,15 @@ class ProxyDealer(Base):
|
|
78
94
|
except:
|
79
95
|
code,txt=404,"Not Found"
|
80
96
|
self.record.response([self.protocol,code, txt],{},0).finish()
|
97
|
+
if code!=200:
|
98
|
+
return self.error(skt_cli, code, txt)
|
81
99
|
bts = mhttp.http_encode_rsp(code, txt, protocol = self.protocol)
|
82
100
|
skt_cli.send(bts)
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
skt.close()
|
101
|
+
try:
|
102
|
+
self.deal_channel(skt_cli, skt)
|
103
|
+
finally:
|
104
|
+
if need_close:
|
105
|
+
skt.close()
|
89
106
|
def deal_channel(self, skt_cli, skt_srv):
|
90
107
|
return self.direct_channel(skt_cli, skt_srv)
|
91
108
|
def direct_channel(self, skt_cli, skt_srv):
|
@@ -147,6 +164,8 @@ class Proxy(Base):
|
|
147
164
|
self.record = record
|
148
165
|
def close(self):
|
149
166
|
self.skt.close()
|
167
|
+
def make_dealer(self, skt, addr):
|
168
|
+
return ProxyDealer(skt, record=self.record.clone())
|
150
169
|
def call(self):
|
151
170
|
self.running=True
|
152
171
|
skt = socket.socket()
|
@@ -155,7 +174,7 @@ class Proxy(Base):
|
|
155
174
|
self.skt = skt
|
156
175
|
while self.running:
|
157
176
|
skt,addr = self.skt.accept()
|
158
|
-
deal =
|
177
|
+
deal = self.make_dealer(skt, addr)
|
159
178
|
th = threading.Thread(target=deal,daemon=True)
|
160
179
|
th.start()
|
161
180
|
self.ths.append(th)
|
@@ -0,0 +1,33 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
from buildz import xf,fz,pathz,logz,pyz
|
4
|
+
from buildz.netz import mhttp
|
5
|
+
import threading
|
6
|
+
confs = r"""
|
7
|
+
[
|
8
|
+
{match=^/baidu, replace='www.baidu.com',ssl=true}
|
9
|
+
]
|
10
|
+
"""
|
11
|
+
rules = xf.loads(confs)
|
12
|
+
path = pathz.Path()
|
13
|
+
path.set("res", "./res")
|
14
|
+
log = logz.simple(path.res("gw/%Y%m%d.log"))
|
15
|
+
def gw():
|
16
|
+
import sys,time
|
17
|
+
ip = '127.0.0.1'
|
18
|
+
port = 9999
|
19
|
+
args = sys.argv[1:]
|
20
|
+
if len(args)>0:
|
21
|
+
ip = args.pop(0)
|
22
|
+
if len(args)>0:
|
23
|
+
port = int(args.pop(0))
|
24
|
+
px = mhttp.Gateway((ip, port), rules, record=mhttp.MsgLog(log))
|
25
|
+
th = threading.Thread(target=px,daemon=True)
|
26
|
+
th.start()
|
27
|
+
print(f"start on {(ip, port)}")
|
28
|
+
while px.running:
|
29
|
+
time.sleep(1)
|
30
|
+
|
31
|
+
#pyz.lc(locals(), caps)
|
32
|
+
pyz.lc(locals(), gw)
|
33
|
+
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: buildz
|
3
|
-
Version: 0.6.
|
3
|
+
Version: 0.6.59
|
4
4
|
Summary: 配置读写(基于json格式进行简化)、ioc、以及其他工具代码。a json-base file format's read and write code by python, and codes to read and product object from configure file in such format(ioc), and other tool codes
|
5
5
|
Home-page: https://github.com/buildCodeZ/buildz
|
6
6
|
Author: Zzz
|
@@ -219,7 +219,9 @@ buildz/iocz/wrap/wraps.py
|
|
219
219
|
buildz/netz/__init__.py
|
220
220
|
buildz/netz/mhttp/__init__.py
|
221
221
|
buildz/netz/mhttp/caps.py
|
222
|
+
buildz/netz/mhttp/gateway.py
|
222
223
|
buildz/netz/mhttp/mhttp.py
|
224
|
+
buildz/netz/mhttp/mhttps.py
|
223
225
|
buildz/netz/mhttp/proxy.py
|
224
226
|
buildz/netz/mhttp/record.py
|
225
227
|
buildz/netz/sslz/__init__.py
|
@@ -228,6 +230,7 @@ buildz/netz/sslz/gen.pyi
|
|
228
230
|
buildz/netz/test/__main__.py
|
229
231
|
buildz/netz/test/test.py
|
230
232
|
buildz/netz/test/test_cli.py
|
233
|
+
buildz/netz/test/test_gw.py
|
231
234
|
buildz/tz/__init__.py
|
232
235
|
buildz/tz/myers_diff.py
|
233
236
|
buildz/tz/test_xfind.py
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|