Hi everyone,
I'm creating a desktop Python application that requires web-based
authentication for accessing additional application features.
HTTP GET is really simple.
HTTP POST is not (at least for me anyway) ;)
I have tried a few different sources, but I cannot get HTTP POST to
successfully log in. I can login using FireFox at http://www.magnetshare.com/main.php
I suggest you register a dummy login to see what I mean (don't enter
your real e-mail address).
Now here's some code:
------------------------------------------------------------------------------
msparams = urllib.urlencode({'user': self.components.User.text,
'pass': self.components.MagnetSharePassword.text, 'sublogin': '1'})
try:
f = urllib() ***What should go here?***
fc = f.read()
fc.close()
except:
self.statusBar.text = "Disconnected"
result = dialog.alertDialog(self, 'Couldn\'t connect to
MagnetShare.com! Please check your Internet connection, and then try
again.')
else:
print fc
-------------------------------------------------------------------------------
Also, could you let us know what modules we should import?
Thanks for checking this out!
By the way, the PHP system I'm using is super easy to set up: http://www.evolt.org/article/PHP_Log...384/index.html 6 3393
On 22 Jun 2006 16:19:50 -0700, "Justin Azoff"
<ju**********@gmail.com> wrote: Jeethu Rao wrote: You need to use httplib. http://docs.python.org/lib/httplib-examples.html
Jeethu Rao
Not at all. They need to read the documentation for urrlib:
http://docs.python.org/lib/module-urllib.html http://docs.python.org/lib/node483.html "The following example uses the "POST" method instead:"....
Additionally, they probably need to use cookielib, otherwise the logged in state will not be persistant.
Here's what's strange... I tried using urllib like this:
----------------------------------------------------------------------------------
try:
msparams = urllib.urlencode({'user':
self.components.User.text, 'pass':
self.components.MagnetSharePassword.text, 'sublogin': 1})
f = urllib.urlopen("http://www.magnetshare.com/process.php",
msparams)
fc = f.read()
fc.close()
print fc
except:
self.statusBar.text = "Disconnected"
result = dialog.alertDialog(self, 'Couldn\'t connect to
MagnetShare.com! Please check your Internet connection, and then try
again.')
else:
print fc
-----------------------------------------------------------------------------------
....and then I visited http://www.magnetshare.com/main.php to see if I
was logged in. Sure enough I was logged in, but the exception was
thrown anyway. I commented out the urlopen, f, and fc lines and
tested it again. This time I made it to "else:"
I'm stumped. I'm glad that the user can log in; however, the
MagnetShare application needs to read in the response from the server,
and then decide what to do with the information. te**@test.test writes: On 22 Jun 2006 16:19:50 -0700, "Justin Azoff" <ju**********@gmail.com> wrote:
Jeethu Rao wrote: You need to use httplib. http://docs.python.org/lib/httplib-examples.html
Jeethu Rao Not at all. They need to read the documentation for urrlib:
http://docs.python.org/lib/module-urllib.html http://docs.python.org/lib/node483.html "The following example uses the "POST" method instead:"....
Additionally, they probably need to use cookielib, otherwise the logged in state will not be persistant.
Or you may not be able to log in at all, for an everyday meaning of
"log in".
Here's what's strange... I tried using urllib like this: ---------------------------------------------------------------------------------- try: msparams = urllib.urlencode({'user': self.components.User.text, 'pass': self.components.MagnetSharePassword.text, 'sublogin': 1}) f = urllib.urlopen("http://www.magnetshare.com/process.php", msparams) fc = f.read() fc.close() print fc except: self.statusBar.text = "Disconnected" result = dialog.alertDialog(self, 'Couldn\'t connect to MagnetShare.com! Please check your Internet connection, and then try again.') else: print fc ----------------------------------------------------------------------------------- ...and then I visited http://www.magnetshare.com/main.php to see if I was logged in. Sure enough I was logged in, but the exception was
That's not how it works (assuming you visited that URL in a browser,
not using Python). The "logged-in-ness" comes from a "session ID"
cookie that is stored in your browser (or in your Python code). The
server sends a cookie when you log in (and usually stores your cookie
in a database). The browser keeps the cookie. When you come back
later using the same browser (maybe even after you've closed the
browser, if it's the right kind of cookie), your browser sends the
cookie back and the server looks up the session ID from that cookie in
the database, and sees it's you.
If you come back using a different browser (and your Python program is
effectively just a different browser than your copy of Firefox or IE
or whatever), then the server won't remember who you are, so you're
not logged in *in that browser session*, even if the server has you
recorded in its database as logged in from a different browser
session.
So, the fact that you saw yourself as logged in when you looked using
your web browser doesn't really help your Python program -- it's still
out in the cold.
thrown anyway. I commented out the urlopen, f, and fc lines and tested it again. This time I made it to "else:"
I'm stumped. I'm glad that the user can log in; however, the MagnetShare application needs to read in the response from the server, and then decide what to do with the information.
Here's one way:
easy_install mechanize
(install easy_install first if you don't have that: http://peak.telecommunity.com/DevCen...g-easy-install
)
#-------------------------------
import mechanize
SHOW_COOKIES = True
br = mechanize.Browser()
if SHOW_COOKIES:
cj = mechanize.CookieJar()
br.set_cookiejar(cj)
br.open("http://www.magnetshare.com/main.php")
br.select_form(nr=0)
br["user"] = "joe"
br["pass"] = "password"
r = br.submit()
assert "Logged In" in r.get_data()
if SHOW_COOKIES:
for cookie in cj:
print cj
#-------------------------------
(note the cookiejar is always there; you only need to create one and
pass it in in order to get at it to e.g. print out the cookies you've
collected)
John
On Sat, 24 Jun 2006 01:28:29 GMT, jj***@reportlab.com (John J. Lee)
wrote: te**@test.test writes:
On 22 Jun 2006 16:19:50 -0700, "Justin Azoff" <ju**********@gmail.com> wrote:
>Jeethu Rao wrote: >> You need to use httplib. >> http://docs.python.org/lib/httplib-examples.html >> >> Jeethu Rao > >Not at all. They need to read the documentation for urrlib: > >http://docs.python.org/lib/module-urllib.html >http://docs.python.org/lib/node483.html >"The following example uses the "POST" method instead:".... > >Additionally, they probably need to use cookielib, otherwise the logged >in state will not be persistant.
Or you may not be able to log in at all, for an everyday meaning of "log in".
Here's what's strange... I tried using urllib like this: ---------------------------------------------------------------------------------- try: msparams = urllib.urlencode({'user': self.components.User.text, 'pass': self.components.MagnetSharePassword.text, 'sublogin': 1}) f = urllib.urlopen("http://www.magnetshare.com/process.php", msparams) fc = f.read() fc.close() print fc except: self.statusBar.text = "Disconnected" result = dialog.alertDialog(self, 'Couldn\'t connect to MagnetShare.com! Please check your Internet connection, and then try again.') else: print fc ----------------------------------------------------------------------------------- ...and then I visited http://www.magnetshare.com/main.php to see if I was logged in. Sure enough I was logged in, but the exception was
That's not how it works (assuming you visited that URL in a browser, not using Python). The "logged-in-ness" comes from a "session ID" cookie that is stored in your browser (or in your Python code). The server sends a cookie when you log in (and usually stores your cookie in a database). The browser keeps the cookie. When you come back later using the same browser (maybe even after you've closed the browser, if it's the right kind of cookie), your browser sends the cookie back and the server looks up the session ID from that cookie in the database, and sees it's you.
If you come back using a different browser (and your Python program is effectively just a different browser than your copy of Firefox or IE or whatever), then the server won't remember who you are, so you're not logged in *in that browser session*, even if the server has you recorded in its database as logged in from a different browser session.
So, the fact that you saw yourself as logged in when you looked using your web browser doesn't really help your Python program -- it's still out in the cold.
thrown anyway. I commented out the urlopen, f, and fc lines and tested it again. This time I made it to "else:"
I'm stumped. I'm glad that the user can log in; however, the MagnetShare application needs to read in the response from the server, and then decide what to do with the information.
Here's one way:
easy_install mechanize
(install easy_install first if you don't have that:
http://peak.telecommunity.com/DevCen...g-easy-install
)
#------------------------------- import mechanize
SHOW_COOKIES = True
br = mechanize.Browser() if SHOW_COOKIES: cj = mechanize.CookieJar() br.set_cookiejar(cj) br.open("http://www.magnetshare.com/main.php") br.select_form(nr=0) br["user"] = "joe" br["pass"] = "password" r = br.submit() assert "Logged In" in r.get_data() if SHOW_COOKIES: for cookie in cj: print cj #-------------------------------
(note the cookiejar is always there; you only need to create one and pass it in in order to get at it to e.g. print out the cookies you've collected)
John
Thanks a lot John! This "mechanize" was exactly what I was looking
for. There are some key improvements over urllib2 and also, cookies
are turned on by default.
Just an FYI for others, PHP can set $SESSIONID when the user refuses
cookies. I haven't decided whether the application will use cookies or
not, but luckily I got the login page response I was looking for. Now,
I just parse the HTML using Python, and then go to the next screen in
the MagnetShare application.
Here's the test code I used.
---------------------------------------------------------------------------------------
import mechanize
br = mechanize.Browser()
br.open("http://www.magnetshare.com/main.php")
br.select_form(nr=0)
br["user"] = "test2"
br["pass"] = "test2"
response1 = br.submit()
fc = response1.read()
print fc
----------------------------------------------------------------------------------------
Cheers!
Ben jj***@reportlab.com (John J. Lee) writes:
[...] #------------------------------- import mechanize
SHOW_COOKIES = True
br = mechanize.Browser() if SHOW_COOKIES: cj = mechanize.CookieJar() br.set_cookiejar(cj) br.open("http://www.magnetshare.com/main.php") br.select_form(nr=0) br["user"] = "joe" br["pass"] = "password" r = br.submit() assert "Logged In" in r.get_data() if SHOW_COOKIES: for cookie in cj: print cj #-------------------------------
That last line should of course have been:
print cookie
and not:
print cj
John This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics
by: Dfenestr8 |
last post by:
Hi.
I've written a cgi messageboard script in python, for an irc chan I happen
to frequent.
Bear with me, it's hard for me to describe what the bug is. So I've
divided this post into two...
|
by: Tom Jones |
last post by:
Hi,
I am using the HttpWebRequest and HttpWebResponse classes to pull
information from a web server on the internet.
I have an account on one of the webservers that I need to log into...
|
by: Alimah |
last post by:
My objective is to log onto a wiki account (specifically wikipedia) using the http proxies provided by them (145.97.39.130 - 145.97.39.140:80). The operating system is Windows XP/Windows Server 2003....
|
by: H J van Rooyen |
last post by:
Hi,
I want to write a small system that is transaction based.
I want to split the GUI front end data entry away from the file handling and
record keeping.
Now it seems almost trivially easy...
|
by: AppleBag |
last post by:
I'm having the worst time trying to login to myspace through code. Can
someone tell me how to do this? Please try it yourself before replying,
only because I have asked this a couple of times in...
|
by: barrybevel |
last post by:
Hi,
I'm trying to login to the www.vodafone.ie website using
HttpWebRequest.
It works fine with IE/Firefox and the .NET Web Control too, just not
with my code.
I think it's a redirect 302...
|
by: klenwell |
last post by:
Another request for comments here.
I'd like to accomplish something like the scheme outlined at this page
here:
http://tinyurl.com/3dtcdr
In a nutshell, the form uses javascript to hash...
|
by: lllomh |
last post by:
Define the method first
this.state = {
buttonBackgroundColor: 'green',
isBlinking: false, // A new status is added to identify whether the button is blinking or not
}
autoStart=()=>{
|
by: DJRhino |
last post by:
Was curious if anyone else was having this same issue or not....
I was just Up/Down graded to windows 11 and now my access combo boxes are not acting right. With win 10 I could start typing...
|
by: Aliciasmith |
last post by:
In an age dominated by smartphones, having a mobile app for your business is no longer an option; it's a necessity. Whether you're a startup or an established enterprise, finding the right mobile app...
|
by: tracyyun |
last post by:
Hello everyone,
I have a question and would like some advice on network connectivity. I have one computer connected to my router via WiFi, but I have two other computers that I want to be able to...
|
by: giovanniandrean |
last post by:
The energy model is structured as follows and uses excel sheets to give input data:
1-Utility.py contains all the functions needed to calculate the variables and other minor things (mentions...
|
by: nia12 |
last post by:
Hi there,
I am very new to Access so apologies if any of this is obvious/not clear.
I am creating a data collection tool for health care employees to complete. It consists of a number of...
|
by: NeoPa |
last post by:
Introduction
For this article I'll be focusing on the Report (clsReport) class. This simply handles making the calling Form invisible until all of the Reports opened by it have been closed, when it...
|
by: isladogs |
last post by:
The next online meeting of the Access Europe User Group will be on Wednesday 6 Dec 2023 starting at 18:00 UK time (6PM UTC) and finishing at about 19:15 (7.15PM).
In this month's session, Mike...
|
by: GKJR |
last post by:
Does anyone have a recommendation to build a standalone application to replace an Access database? I have my bookkeeping software I developed in Access that I would like to make available to other...
| |