i quite new python, have been playing around tkinter , requests try create simple program can log web application. have been getting following error:
exception in tkinter callback traceback (most recent call last): file "/system/library/frameworks/python.framework/versions/2.7/lib/python2.7/lib-tk/tkinter.py", line 1410, in __call__ return self.func(*args) file "test.py", line 35, in login c.post('http://fruro.com/login.php', data=self.payload) file "/users/peter/desktop/fruropy/fruro/lib/python2.7/site-packages/requests/sessions.py", line 399, in post return self.request('post', url, data=data, **kwargs) file "/users/peter/desktop/fruropy/fruro/lib/python2.7/site-packages/requests/sessions.py", line 343, in request prep = req.prepare() file "/users/peter/desktop/fruropy/fruro/lib/python2.7/site-packages/requests/models.py", line 222, in prepare p.prepare_body(self.data, self.files) file "/users/peter/desktop/fruropy/fruro/lib/python2.7/site-packages/requests/models.py", line 375, in prepare_body body = self._encode_params(data) file "/users/peter/desktop/fruropy/fruro/lib/python2.7/site-packages/requests/models.py", line 81, in _encode_params return urlencode(result, doseq=true) file "/system/library/frameworks/python.framework/versions/2.7/lib/python2.7/urllib.py", line 1311, in urlencode len(v) attributeerror: entry instance has no attribute '__len__' i have been trying figure out have gone wrong several hours don't know i'm doing wrong.
here code i'm using:
from tkinter import * requests import session class login: def __init__(self, master): frame = frame(master) frame.pack() self.emlabel = label(frame, text="email:") self.emlabel.pack(side=left) self.email = entry(frame, width=15) self.email.pack(side=left) self.paslabel = label(frame, text="password:") self.paslabel.pack(side=left) self.password = entry(frame, show="*", width=15) self.password.pack(side=left) self.hi_there = button(frame, text="login", command=self.login) self.hi_there.pack() def login(self): self.payload = { 'action': 'login', 'email': self.email, 'password': self.password } session() c: c.post('http://fruro.com/login.php', data=self.payload) self.request = c.get('http://fruro.com') print self.request.headers print self.request.text root = tk() login = login(root) root.title("login account") root.mainloop() any appreciated. thank in advance.
the problem on line,
c.post('http://fruro.com/login.php', data=self.payload) and happening because dict passing in data parameter has values references entry widgets , not content of widgets. when requests tries len, error since entry doesn't implement __len__ (not wanted anyway). fix change self.payload like,
self.payload = { 'action': 'login', 'email': self.email.get(), # call method return 'password': self.password.get() # value in entry widgets }
Comments
Post a Comment