Skip to content

Commit c6c755b

Browse files
Marcosfate0
authored andcommitted
Add example of how to implement a POST request
By "sniffing" the normal request (`Page.navigate`, GET method), method, headers and postData parameters can be modified. As this is not fairly intuitive, I decided to add an example.
1 parent ccff59f commit c6c755b

File tree

1 file changed

+87
-0
lines changed

1 file changed

+87
-0
lines changed

examples/post_request.py

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
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

Comments
 (0)