# aardio 范例: CDP 事件



```aardio
//事件
import crypt;
import console;
import win.ui;
/*DSG{{*/
var winform = win.form(text="CDP 事件";right=818;bottom=507)
winform.add()
/*}}*/

import web.view; 
var wb = web.view(winform);
winform.show();
 
//允许监听网络事件
wb.cdp("Network.enable");

//订阅 CDP 事件
wb.cdpSubscribe("Network.requestWillBeSent",function(params){
	
	//https://chromedevtools.github.io/devtools-protocol/tot/Network/#event-requestWillBeSent
	if(params.request.url == params.documentURL){
		
		winform.text = params.request.url; 
		
		//获取 HTTP 请求头。
		var headers = params.request.headers;
		console.dumpJson(headers);
	
	}
	
	//CDP 事件应尽快退出，
	//如果返回函数，该函数将在 CDP 事件退出以后异步执行。
	return function(){
		//阻塞耗时操作适合放到这里。  
	} 
})

//订阅 CDP 事件
wb.cdpSubscribe("Network.responseReceived",function(params){

	//CDP 事件内部不要阻塞调用其他 CDP 命令。
	wb.cdp("Network.getResponseBody",
		{requestId = params.requestId},
		
		//使用回调函数异步调用其他 CDP 命令
		function(result,err){
			if(!result){ 
				console.log("出错了:",lasterr(err) ) 
				return;
			}
			
			if(result.base64Encoded){
				//result.body = crypt.decodeBin(result.body); 
			}
			else { 
				console.dump(result.body);
			} 
		}
	) 
} ) 

wb.go("https://www.aardio.com");
win.loopMessage();
```

