1
+ import pychrome
2
+ import time
3
+ import urllib
4
+
5
+
6
+
7
+ class ChromiumClient (object ):
8
+ """ Client to interact with Chromium """
9
+
10
+ def __init__ (self ):
11
+ self .browser = pychrome .Browser (url = "http://127.0.0.1:9222" )
12
+
13
+ def do_post (self ):
14
+ self .tab = self .browser .new_tab ()
15
+
16
+ event_handler = EventHandler ()
17
+
18
+ event_handler .set_token ('asdkflj497564dsklf' )
19
+ event_handler .set_post_data ({
20
+ 'param1' : 'value1' ,
21
+ 'param2' : 'value2'
22
+ })
23
+
24
+ url_pattern_object = {'urlPattern' : '*fate0*' }
25
+ self .tab .Network .setRequestInterception (patterns = [url_pattern_object ])
26
+
27
+ self .tab .Network .requestIntercepted = event_handler .on_request_intercepted
28
+
29
+ self .tab .start ()
30
+
31
+ self .tab .Network .enable ()
32
+ self .tab .Page .enable ()
33
+
34
+ self .tab .Page .navigate (url = 'https://github.com/fate0/pychrome' )
35
+
36
+ self .tab .wait (5 )
37
+ self .tab .stop ()
38
+
39
+ self .browser .close_tab (self .tab .id )
40
+
41
+
42
+ class EventHandler (object ):
43
+ def __init__ (self ):
44
+ self .tab = None
45
+ self .token = None
46
+ self .is_first_request = False
47
+ self .post_data = {}
48
+
49
+ def set_tab (self , t ):
50
+ self .tab = t
51
+
52
+ def set_token (self , t ):
53
+ self .token = t
54
+
55
+ def set_post_data (self , pd ):
56
+ self .post_data = pd
57
+
58
+ def on_request_intercepted (self , ** kwargs ):
59
+ new_args = {'interceptionId' : kwargs ['interceptionId' ]}
60
+
61
+ if self .is_first_request :
62
+ # Modify first request only, following are media/static
63
+ # requests...
64
+ self .is_first_request = False
65
+
66
+ extra_headers = {
67
+ 'Requested-by' : 'Chromium' ,
68
+ 'Authorization' : 'Token ' + self .token
69
+ }
70
+
71
+ request = kwargs .get ('request' )
72
+ request ['headers' ].update (extra_headers )
73
+
74
+ new_args .update ({
75
+ 'url' : request ['url' ],
76
+ 'method' : 'POST' ,
77
+ 'headers' : request ['headers' ],
78
+ 'postData' : urllib .urlencode (self .post_data )
79
+ })
80
+
81
+ self .tab .Network .continueInterceptedRequest (** new_args )
82
+
83
+
84
+ if __name__ == '__main__' :
85
+ client = ChromiumClient ()
86
+
87
+ client .do_post ()
0 commit comments