首页 文章 精选 留言 我的

精选列表

搜索[工具模块],共10014篇文章
优秀的个人博客,低调大师

(一)python初识、变量、注释、模块使用

python初识 移步老男孩武sir文章(python2):http://www.cnblogs.com/wupeiqi/articles/5433925.html 武功sir文章列表(python2):http://www.cnblogs.com/wupeiqi/articles/5433893.html Centos6升级python2至python3:http://www.cnblogs.com/lyy-totoro/p/5603102.html 简单笔记如下: python的特点 可以写网页,也可以写后台功能。执行效率低,开发效率高(相较于java) python的种类 JPython:java开发的python,运行python代码先转换为java代码,然后执行 IronPython:.NET和Mono上实现的Python语言,执行方法同上 JavaScriptPython:javascript开发的python,执行方法同上 RubyPython:类推,同上 CPython:Cpython是我们常用的python,它是由C开发的,最稳定、功能最强的python pypy:这是用CPython开发的Python。执行效率最快的python,但功能不够完善、稳定 python执行流程 安装python至OS,按照python规则写文件,将文件交给python解释器,读取文件内容至内存,执行动作,获取执行结果 变量 只能由大小写字母、数字、下划线组成,但不能以数字开头; 且以下内置的关键字不能声明为变量: ['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield'] 一个简单的实例: #!/usr/bin/env python 指定解释器 # -*- coding:utf-8 -*- #编码,py2必须指定,否则乱码 time = "20180422" username = input('输入用户名:') password = input('输入密码:') if username == "erbiao" and password == "erbiaopasswd" :print("登录成功") print(time) 执行效果 注释 当行注释用“#”:#被注释内容 多行注释用:"""被注释内容""" (首尾各三个双引号)

优秀的个人博客,低调大师

Python中的string模块的学习

学习资料:http://docs.python.org/library/string.html#string.Formatter 感觉学习任何东西,官方的东西总是最好的,呵呵。个人总结(代码为主,相信有python基础的都能看懂): 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 >>> import string >>> string.ascii_letters 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' >>> string.ascii_lowercase 'abcdefghijklmnopqrstuvwxyz' >>> string.ascii_uppercase 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' >>> string.digits '0123456789' >>> string.hexdigits '0123456789abcdefABCDEF' >>> string.letters 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' >>> string.lowercase 'abcdefghijklmnopqrstuvwxyz' >>> string.uppercase 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' >>> string.octdigits '01234567' >>> string.punctuation '!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~' >>> string.printable '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ \t\n\r\x0b\x0c' >>> string.whitespace '\t\n\x0b\x0c\r 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 >>> '{0}, {1}, {2}' . format ( 'a' , 'b' , 'c' ) 'a, b, c' >>> '{}, {}, {}' . format ( 'a' , 'b' , 'c' ) # 2.7+ only 'a, b, c' >>> '{2}, {1}, {0}' . format ( 'a' , 'b' , 'c' ) 'c, b, a' >>> '{2}, {1}, {0}' . format ( * 'abc' ) # unpacking argument sequence 'c, b, a' >>> '{0}{1}{0}' . format ( 'abra' , 'cad' ) # arguments' indices can be repeated 'abracadabra' >>> 'Coordinates: {latitude}, {longitude}' . format (latitude = '37.24N' , longitude = '-115.81W' ) 'Coordinates: 37.24N, -115.81W' >>> coord = { 'latitude' : '37.24N' , 'longitude' : '-115.81W' } >>> 'Coordinates: {latitude}, {longitude}' . format ( * * coord) 'Coordinates: 37.24N, -115.81W' >>> c = 3 - 5j >>> ( 'The complex number {0} is formed from the real part {0.real} ' ... 'and the imaginary part {0.imag}.' ). format (c) 'The complex number (3-5j) is formed from the real part 3.0 and the imaginary part -5.0.' >>> class Point( object ): ... def __init__( self , x, y): ... self .x, self .y = x, y ... def __str__( self ): ... return 'Point({self.x}, {self.y})' . format ( self = self ) ... >>> str (Point( 4 , 2 )) 'Point( 4 , 2 ) >>> coord = ( 3 , 5 ) >>> 'X: {0[0]}; Y: {0[1]}' . format (coord) 'X: 3; Y: 5' >>> "repr() shows quotes: {!r}; str() doesn't: {!s}" . format ('test1 ', ' test2') "repr() shows quotes: 'test1'; str() doesn't: test2" >>> '{:<30}' . format ( 'left aligned' ) 'left aligned ' >>> '{:>30}' . format ( 'right aligned' ) ' right aligned' >>> '{:^30}' . format ( 'centered' ) ' centered ' >>> '{:*^30}' . format ( 'centered' ) # use '*' as a fill char '***********centered***********' >>> '{:+f}; {:+f}' . format ( 3.14 , - 3.14 ) # show it always '+3.140000; -3.140000' >>> '{: f}; {: f}' . format ( 3.14 , - 3.14 ) # show a space for positive numbers ' 3.140000; -3.140000' >>> '{:-f}; {:-f}' . format ( 3.14 , - 3.14 ) # show only the minus -- same as '{:f}; {:f}' '3.140000; -3.140000' >>> # format also supports binary numbers >>> "int: {0:d}; hex: {0:x}; oct: {0:o}; bin: {0:b}" . format ( 42 ) 'int: 42; hex: 2a; oct: 52; bin: 101010' >>> # with 0x, 0o, or 0b as prefix: >>> "int: {0:d}; hex: {0:#x}; oct: {0:#o}; bin: {0:#b}" . format ( 42 ) 'int: 42; hex: 0x2a; oct: 0o52; bin: 0b101010' >>> '{:,}' . format ( 1234567890 ) '1,234,567,890' >>> points = 19.5 >>> total = 22 >>> 'Correct answers: {:.2%}.' . format (points / total) 'Correct answers: 88.64%' >>> import datetime >>> d = datetime.datetime( 2010 , 7 , 4 , 12 , 15 , 58 ) >>> '{:%Y-%m-%d %H:%M:%S}' . format (d) '2010-07-04 12:15:58' >>> for align, text in zip ( '<^>' , [ 'left' , 'center' , 'right' ]): ... '{0:{fill}{align}16}' . format (text, fill = align, align = align) ... 'left<<<<<<<<<<<<' '^^^^^center^^^^^' '>>>>>>>>>>>right' >>> >>> octets = [ 192 , 168 , 0 , 1 ] >>> '{:02X}{:02X}{:02X}{:02X}' . format ( * octets) 'C0A80001' >>> int (_, 16 ) 3232235521 >>> >>> width = 5 >>> for num in range ( 5 , 12 ): ... for base in 'dXob' : ... print '{0:{width}{base}}' . format (num, base = base, width = width), ... print ... 5 5 5 101 6 6 6 110 7 7 7 111 8 8 10 1000 9 9 11 1001 10 A 12 1010 11 B 13 1011 >>> from string import Template >>> s = Template( '$who likes $what' ) >>> s.substitute(who = 'tim' , what = 'kung pao' ) 'tim likes kung pao' >>> d = dict (who = 'tim' ) >>> Template( 'Give $who $100' ).substitute(d) Traceback (most recent call last): [...] ValueError: Invalid placeholder in string: line 1 , col 10 >>> Template( '$who likes $what' ).substitute(d) Traceback (most recent call last): [...] KeyError: 'what' >>> Template( '$who likes $what' ).safe_substitute(d) 'tim likes $what' 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 string.capitalize(word) 返回一个副本,首字母大写 >>> string.capitalize( "hello" ) 'Hello' >>> string.capitalize( "hello world" ) 'Hello world' >>> string.split( "asdadada asdada" ) [ 'asdadada' , 'asdada' ] >>> string.strip( " adsd " ) 'adsd' >>> string.rstrip( " adsd " ) ' adsd' >>> string.lstrip( " adsd " ) 'adsd ' string.swapcase(s) 小写变大写,大写变小写 >>> string.swapcase( "Helloo" ) 'hELLOO' >>> string.ljust( "ww" , 20 ) 'ww ' >>> string.rjust( 'ww' , 20 ) ' ww' >>> string.center( 'ww' , 20 ) ' ww ' string.zfill(s, width) Pad a numeric string on the left with zero digits until the given width is reached. Strings starting with a sign are handled correctly. >>> string.zfill( 'ww' , 20 ) '000000000000000000ww' ============================================================================== 本文转自被遗忘的博客园博客,原文链接:http://www.cnblogs.com/rollenholt/archive/2011/11/25/2263722.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

spark源码系列文章------shuffle模块详解

一、Basic shuffle writer实现解析 在Executor上执行shuffle Map Task时,最终会调用shuffleMapTask的runTask,核心逻辑如下: 1.从sparkEnv中获得shuffleManager; 2.从manager中获得writer 3.调用RDD开始计算,运算结果通过writer进行持久化,持久化之前通过Aggregator来确定是否需要进行Map端聚合,然后将结果通过FileShuffleManager#forMapTask的方法写入,写入完成后,会将元数据信息写入MapStatus,然后下游的Task可以通过这个MapStatus取得需要处理的数据。 这样writer通过ShuffleDependency#partitioner来获得下游partition的数量,下游的每个partition都会对应一个文件,文件名字的格式为:“shuffle_”+shuffledId+"_"+mapId+"_"+reduceId。 由于每个shuffle Map Task需要为每个下游的Task创建一个单独的文件,因此文件的数量就是number(shuffle_map_task)*number(following_task)。这样会导致创建和打开许多文件。 后来spark又引入Shuffle Consolidate Writer,原理是core上的第一个Task创建一个文件,该core上的后面的Task的shuffle操作都追加写入改文件,这样文件数量number(core)*number(following_task) 。 //todo

优秀的个人博客,低调大师

xposed框架的Android网络监测模块

试图监控一个app所有的网络通信。 前提 : 手机root过 已成功安装xposed框架 XposedInstaller: https://github.com/rovo89/XposedInstaller 操作步骤 添加xposed框架XposedBridgeApi-54.jar包到android项目build path assets目录下添加xposed_init文件内容为com.example.xposeddiy.Test,指示入口 AndroidManifest.xml文件application标签下添加 [[meta-data android:name="xposedmodule" android:value="true" /> [[meta-data android:name="xposedminversion" android:value="40" /> [[meta-data android:name="xposeddescription" android:value="network monitor" /> hook android所有通信调用函数,代码如下 package com.example.xposeddiy; import java.io.FileNotFoundException; import java.io.IOException; import java.io.OutputStream; import java.lang.reflect.Method; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.Proxy; import java.net.ServerSocket; import java.net.SocketAddress; import java.net.URL; import java.util.Arrays; import java.util.Map; import org.apache.http.Header; import org.apache.http.HttpEntity; import org.apache.http.HttpHost; import org.apache.http.HttpRequest; import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpEntityEnclosingRequestBase; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.utils.URLEncodedUtils; import org.apache.http.protocol.HTTP; import org.apache.http.protocol.HttpContext; import org.apache.http.util.EntityUtils; import android.app.Activity; import android.app.Application; import android.content.IntentFilter; import android.content.SharedPreferences; import android.content.pm.ApplicationInfo; import android.util.Log; import de.robv.android.xposed.IXposedHookLoadPackage; import de.robv.android.xposed.XC_MethodHook; import de.robv.android.xposed.XC_MethodHook.MethodHookParam; import de.robv.android.xposed.XposedBridge; import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam; import static de.robv.android.xposed.XposedHelpers.findAndHookMethod; import static de.robv.android.xposed.XposedHelpers.findAndHookConstructor; //web.loadUrl("http://1.1.1.0", param);web.loadUrl("http://1.1.1.1/");web.postUrl("",""); //DatagramSocket.send(packet) 发送 //DatagramSocket DatagramSocket.bind DatagramSocket.createSocket 监听 //startupSocket对应多个socket构造函数 sock.connect //ServerSocket ServerSocket.bind //SocketChannel.open(addr) ?SocketChannel.connect? //outputstream.write(byte[],int,int) //httpclient.execute(post); //urls.openConnection(); urls.openConnection(proxy); ?urls.setRequestProperty? //辅助记录,避免出现调用其他包进行监听 logcat | grep xuhu >>/sdcard/a.txt public class Test implements IXposedHookLoadPackage{ private String TARGET_APP = "com.baidu.BaiduMap"; private String[] TARGET_APPS = new String[]{"com.yek.lafaso","com.vipshop.vswxk","com.baidu.BaiduMap","com.example.t1","com.baidu.fb","com.tencent.mm","com.tencent.mtt","com.nq.mdm"}; private SharedPreferences msp = null; private Application mApp = null; private String LOG_FILENAME = "_test_network"; private boolean NETWORK = true; private boolean HTTP_DATA = true; private boolean SOCKET_DATA = true; private boolean HTTP_RESPONSE = false; @Override public void handleLoadPackage(LoadPackageParam lpparam) throws Throwable { if(!Arrays.asList(TARGET_APPS).contains(lpparam.packageName))return; TARGET_APP = lpparam.packageName; if(lpparam.appInfo == null || (lpparam.appInfo.flags & (ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_UPDATED_SYSTEM_APP)) !=0){ return; }else if(true){//lpparam.isFirstApplication hookOncreate(lpparam);// if(mApp != null){ msp = mApp.getSharedPreferences(LOG_FILENAME, Activity.MODE_PRIVATE); } mLog("target", lpparam.packageName); //网络监控开始 if(NETWORK){ findAndHookConstructor(InetSocketAddress.class, String.class, int.class, new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { mLog("网络地址", param.args[0]+":"+param.args[1]); super.beforeHookedMethod(param); } }); // findAndHookMethod("java.net.DatagramSocket", lpparam.classLoader, "send", DatagramPacket.class, new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { DatagramPacket d = (DatagramPacket)param.args[0]; if(SOCKET_DATA){ mLog("udp发送", d.getAddress()+":"+d.getPort()+":"+new String(d.getData())); }else{ mLog("udp发送", d.getAddress()+":"+d.getPort()); } super.beforeHookedMethod(param); } }); findAndHookMethod("java.net.DatagramSocket", lpparam.classLoader, "createSocket", int.class, InetAddress.class, new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { mLog("udp监听", ((InetAddress)param.args[1]).toString()+":"+(Integer)param.args[0]); super.beforeHookedMethod(param); } }); findAndHookMethod("java.net.DatagramSocket", lpparam.classLoader, "bind", SocketAddress.class, new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { mLog("udp监听", ((SocketAddress)param.args[0]).toString()); super.beforeHookedMethod(param); } }); findAndHookConstructor(DatagramSocket.class, SocketAddress.class, new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { mLog("udp监听", ((SocketAddress)param.args[0]).toString()); super.beforeHookedMethod(param); } }); // findAndHookMethod("android.webkit.WebView", lpparam.classLoader, "loadUrl", String.class, new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { String d = (String)param.args[0]; mLog("webview", d); super.beforeHookedMethod(param); } }); findAndHookMethod("android.webkit.WebView", lpparam.classLoader, "loadUrl", String.class, Map.class, new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { String d = (String)param.args[0]; if(HTTP_DATA){ Map d1 = (Map)param.args[1]; mLog("webview", d+":"+d1.toString()); }else{ mLog("webview", d); } super.beforeHookedMethod(param); } }); findAndHookMethod("android.webkit.WebView", lpparam.classLoader, "postUrl", String.class, byte[].class, new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { String d = (String)param.args[0]; if(HTTP_DATA){ String d1 = new String((byte[])param.args[1]); mLog("webview", d+":"+d1); }else{ mLog("webview", d); } super.beforeHookedMethod(param); } }); // if(SOCKET_DATA){ findAndHookMethod("java.io.OutputStream", lpparam.classLoader, "write", byte[].class, int.class, int.class, new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { byte[] d = (byte[])param.args[0]; mLog("socketdata", new String(d)); super.beforeHookedMethod(param); } }); findAndHookMethod("java.io.OutputStream", lpparam.classLoader, "write", byte[].class, new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { byte[] d = (byte[])param.args[0]; mLog("socketdata1", new String(d)); super.beforeHookedMethod(param); } }); } findAndHookMethod("java.nio.channels.SocketChannel", lpparam.classLoader, "open", SocketAddress.class, new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { mLog("tcp连接", ((SocketAddress)param.args[0]).toString()); super.beforeHookedMethod(param); } }); findAndHookMethod("java.net.Socket", lpparam.classLoader, "startupSocket", InetAddress.class, int.class, InetAddress.class, int.class, boolean.class, new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { mLog("tcp连接", ((InetAddress)param.args[0]).toString()+":"+(Integer)param.args[1]); super.beforeHookedMethod(param); } }); findAndHookMethod("java.net.Socket", lpparam.classLoader, "connect", SocketAddress.class, int.class, new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { mLog("tcp连接", ((SocketAddress)param.args[0]).toString()); super.beforeHookedMethod(param); } }); findAndHookConstructor(ServerSocket.class, int.class, int.class, InetAddress.class, new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { mLog("tcp监听", ((InetAddress)param.args[0]).toString()); super.beforeHookedMethod(param); } }); findAndHookMethod("java.net.ServerSocket", lpparam.classLoader, "bind", SocketAddress.class, int.class, new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { mLog("tcp监听", ((SocketAddress)param.args[0]).toString()); super.beforeHookedMethod(param); } }); // findAndHookMethod("java.net.URL", lpparam.classLoader, "openConnection", java.net.Proxy.class, new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { URL url = (URL) param.thisObject; mLog("urlconnp", url.toString()+":"+((Proxy)param.args[0]).toString()); super.beforeHookedMethod(param); } }); if(HTTP_DATA){ findAndHookMethod("java.net.URLConnection", lpparam.classLoader, "setRequestProperty", String.class, String.class, new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { mLog("urlconnheader", (String)param.args[0]+":"+(String)param.args[1]); super.beforeHookedMethod(param); } }); findAndHookMethod("java.net.URLConnection", lpparam.classLoader, "addRequestProperty", String.class, String.class, new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { mLog("urlconnheader", (String)param.args[0]+":"+(String)param.args[1]); super.beforeHookedMethod(param); } }); } findAndHookMethod("java.net.URL", lpparam.classLoader, "openConnection", new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { URL url = (URL) param.thisObject; mLog("urlconn", url.toString()); super.beforeHookedMethod(param); } }); // hookHttpClient(lpparam); }//网络监控结束 } } public void mLog(String tag, String text){ Log.i(TARGET_APP, "xuhu"+tag+":"+text); if(msp != null){ if(HTTP_DATA){ mSharePrefer(text,tag); }else{ int i = text.indexOf("?"); if(i > 0) mSharePrefer(text.substring(0, i), tag); else mSharePrefer(text, tag); } } } public void mSharePrefer(String key, String value){ SharedPreferences.Editor editor = msp.edit(); editor.putString(key, value); editor.commit(); } public void hookHttpClient(LoadPackageParam lpparam){ findAndHookMethod("org.apache.http.impl.client.AbstractHttpClient", lpparam.classLoader, "execute", HttpHost.class, HttpRequest.class, HttpContext.class, new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { //HttpHost host = (HttpHost) param.args[0]; HttpRequest request = (HttpRequest) param.args[1]; if (request instanceof HttpGet) { HttpGet httpGet = (HttpGet) request; mLog("httpclientGet", httpGet.getURI().toString()); if(HTTP_DATA){ Header[] headers = request.getAllHeaders(); if (headers != null) { for (int i = 0; i < headers.length; i++) { mLog("getHeader", headers[i].getName() + ": " + headers[i].getValue()); } }} } else if (request instanceof HttpPost) { HttpPost httpPost = (HttpPost) request; mLog("httpclientPost", httpPost.getURI().toString()); if(HTTP_DATA){// until get header Header[] headers = request.getAllHeaders(); if (headers != null) { for (int i = 0; i < headers.length; i++) { mLog("postHeader", headers[i].getName() + ":" + headers[i].getValue()); } } HttpEntity entity = httpPost.getEntity(); String contentType = null; if (entity.getContentType() != null) { contentType = entity.getContentType().getValue(); if (URLEncodedUtils.CONTENT_TYPE.equals(contentType)) { try { byte[] data = new byte[(int) entity.getContentLength()]; entity.getContent().read(data); String content = new String(data, HTTP.DEFAULT_CONTENT_CHARSET); mLog("postcontent",content); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } else if (contentType.startsWith(HTTP.DEFAULT_CONTENT_TYPE)) { try { byte[] data = new byte[(int) entity.getContentLength()]; entity.getContent().read(data); String content = new String(data, contentType.substring(contentType.lastIndexOf("=") + 1)); mLog("postcontent",content); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }else{ byte[] data = new byte[(int) entity.getContentLength()]; try { entity.getContent().read(data); String content = new String(data, HTTP.DEFAULT_CONTENT_CHARSET); mLog("postcontent",content); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }//get header }else{ HttpEntityEnclosingRequestBase get = (HttpEntityEnclosingRequestBase)request; HttpEntity entity = get.getEntity(); mLog("Android-async-http", get.getURI().toString()); if(HTTP_DATA){ Header[] headers = request.getAllHeaders(); if (headers != null) { for (int i = 0; i < headers.length; i++) { mLog("Android-async-httpHeader", headers[i].getName() + ":" + headers[i].getValue()); } } if(entity!= null){ String content = EntityUtils.toString(entity); mLog("Android-async-httpcontent", content); } } } super.beforeHookedMethod(param); } @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { HttpResponse resp = (HttpResponse) param.getResult(); if (resp != null && HTTP_RESPONSE) { mLog("Status Code", ""+resp.getStatusLine().getStatusCode()); Header[] headers = resp.getAllHeaders(); if (headers != null) { for (int i = 0; i < headers.length; i++) { mLog("response", headers[i].getName() + ":" + headers[i].getValue()); } } } super.afterHookedMethod(param); } }); } public void hookOncreate(LoadPackageParam lpparam){ String appClassName = lpparam.appInfo.className; if (appClassName == null) { Method hookOncreateMethod = null; try { hookOncreateMethod = Application.class.getDeclaredMethod("onCreate", new Class[] {}); } catch (NoSuchMethodException e) { e.printStackTrace(); mLog("target0", "target"); } XposedBridge.hookMethod(hookOncreateMethod, new ApplicationOnCreateHook("target0",lpparam)); }else{ Class[[?> hook_application_class = null; try { hook_application_class = lpparam.classLoader.loadClass(appClassName); if (hook_application_class != null) { Method hookOncreateMethod = hook_application_class.getDeclaredMethod("onCreate", new Class[] {}); if (hookOncreateMethod != null) { XposedBridge.hookMethod(hookOncreateMethod, new ApplicationOnCreateHook("target1",lpparam)); } } mLog("target11", "target"); } catch (Exception e) { // TODO Auto-generated catch block Method hookOncreateMethod; try { hookOncreateMethod = Application.class.getDeclaredMethod("onCreate", new Class[] {}); if (hookOncreateMethod != null) { XposedBridge.hookMethod(hookOncreateMethod, new ApplicationOnCreateHook("target2",lpparam)); } mLog("target21", "target"); } catch (NoSuchMethodException e1) { // TODO Auto-generated catch block mLog("target3", "target"); e1.printStackTrace(); } } } } private class ApplicationOnCreateHook extends XC_MethodHook { public String which; public LoadPackageParam lpparam; public ApplicationOnCreateHook(String which, LoadPackageParam lpparam){ this.which = which; this.lpparam = lpparam; } @Override public void afterHookedMethod(MethodHookParam param) throws FileNotFoundException { mLog("", which); if (!HAS_REGISTER_LISENER) { mApp = (lpparam.isFirstApplication)?(Application) param.thisObject:mApp; IntentFilter filter = new IntentFilter("xuhuafeng"); mApp.registerReceiver(new CommandBroadcastReceiver(), filter); msp = mApp.getSharedPreferences(LOG_FILENAME, Activity.MODE_PRIVATE); HAS_REGISTER_LISENER = true; } } } private boolean HAS_REGISTER_LISENER = false; }

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

用户登录
用户注册