<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://aznot.com/index.php?action=history&amp;feed=atom&amp;title=Python%2Furllib</id>
	<title>Python/urllib - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://aznot.com/index.php?action=history&amp;feed=atom&amp;title=Python%2Furllib"/>
	<link rel="alternate" type="text/html" href="https://aznot.com/index.php?title=Python/urllib&amp;action=history"/>
	<updated>2026-05-07T04:22:03Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://aznot.com/index.php?title=Python/urllib&amp;diff=4569&amp;oldid=prev</id>
		<title>Kenneth: /* Basic Get */</title>
		<link rel="alternate" type="text/html" href="https://aznot.com/index.php?title=Python/urllib&amp;diff=4569&amp;oldid=prev"/>
		<updated>2018-01-08T23:24:50Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Basic Get&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== urllib ==&lt;br /&gt;
&lt;br /&gt;
== Basic Get ==&lt;br /&gt;
&lt;br /&gt;
 import urllib2&lt;br /&gt;
 response = urllib2.urlopen(&amp;#039;http://python.org/&amp;#039;)&lt;br /&gt;
 html = response.read()&lt;br /&gt;
&lt;br /&gt;
 import urllib2&lt;br /&gt;
 response = urllib2.urlopen(&amp;#039;http://python.org/&amp;#039;)&lt;br /&gt;
 if response.code != 200:&lt;br /&gt;
   print &amp;quot;failure&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== POST data: ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import urllib&lt;br /&gt;
import urllib2&lt;br /&gt;
&lt;br /&gt;
url = &amp;#039;http://www.someserver.com/cgi-bin/register.cgi&amp;#039;&lt;br /&gt;
values = {&amp;#039;name&amp;#039; : &amp;#039;Michael Foord&amp;#039;,&lt;br /&gt;
          &amp;#039;location&amp;#039; : &amp;#039;Northampton&amp;#039;,&lt;br /&gt;
          &amp;#039;language&amp;#039; : &amp;#039;Python&amp;#039; }&lt;br /&gt;
&lt;br /&gt;
data = urllib.urlencode(values)&lt;br /&gt;
req = urllib2.Request(url, data)&lt;br /&gt;
response = urllib2.urlopen(req)&lt;br /&gt;
the_page = response.read()&lt;br /&gt;
&lt;br /&gt;
print the_page&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Request Headers ==&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
 user_agent = &amp;quot;Mozilla/5.0 (Windows NT 6.1; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0&amp;quot;&lt;br /&gt;
 headers = { &amp;#039;User-Agent&amp;#039; : user_agent }&lt;br /&gt;
 data = urllib.urlencode(values)&lt;br /&gt;
 req = urllib2.Request(url, data, headers)&lt;br /&gt;
&lt;br /&gt;
 # or&lt;br /&gt;
 request = urllib2.Request(&amp;#039;http://your.tld/...&amp;#039;)&lt;br /&gt;
 request.add_header(&amp;#039;User-Agent&amp;#039;, &amp;#039;some fake agent string&amp;#039;)&lt;br /&gt;
 request.add_header(&amp;#039;Referer&amp;#039;, &amp;#039;fake referrer&amp;#039;)&lt;br /&gt;
 ...&lt;br /&gt;
 response = urllib2.urlopen(request)&lt;br /&gt;
&lt;br /&gt;
== Response Header ==&lt;br /&gt;
&lt;br /&gt;
 print response.info().getheader(&amp;#039;Content-Type&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
 print response.info().headers  # list&lt;br /&gt;
&lt;br /&gt;
 response.url  # response url&lt;br /&gt;
&lt;br /&gt;
== Cookies ==&lt;br /&gt;
&lt;br /&gt;
 import cookielib&lt;br /&gt;
 cj = cookielib.CookieJar()&lt;br /&gt;
 opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))&lt;br /&gt;
 # user opener for all future requests&lt;br /&gt;
 req = urllib2.Request(url, postdata, headers)&lt;br /&gt;
 response = opener.open(req)&lt;br /&gt;
&lt;br /&gt;
References:&lt;br /&gt;
* HOWTO Fetch Internet Resources Using urllib2 — Python v2.7.6 documentation - https://docs.python.org/2/howto/urllib2.html&lt;br /&gt;
&lt;br /&gt;
== Progress Bar ==&lt;br /&gt;
&lt;br /&gt;
Progress bar: [http://stackoverflow.com/questions/51212/how-to-write-a-download-progress-indicator-in-python]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
global rem_file # global variable to be used in dlProgress&lt;br /&gt;
&lt;br /&gt;
urllib.urlretrieve(rem_file, loc_file, reporthook=dlProgress)&lt;br /&gt;
&lt;br /&gt;
def dlProgress(count, blockSize, totalSize):&lt;br /&gt;
    percent = int(count*blockSize*100/totalSize)&lt;br /&gt;
    sys.stdout.write(&amp;quot;\r&amp;quot; + rem_file + &amp;quot;...%d%%&amp;quot; % percent)&lt;br /&gt;
    sys.stdout.flush()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* http - Python urllib2 Progress Hook - Stack Overflow - http://stackoverflow.com/questions/2028517/python-urllib2-progress-hook&lt;br /&gt;
* How to write a download progress indicator in Python? - Python - K210.ORG - http://k210.org/python/how_to_write_a_download_progress_indicator_in_python/&lt;br /&gt;
&lt;br /&gt;
== Read web page 2.x ==&lt;br /&gt;
&lt;br /&gt;
 import urllib&lt;br /&gt;
 resp = urllib.urlopen(&amp;#039;http://www.python.org&amp;#039;)&lt;br /&gt;
 html = resp.read()&lt;br /&gt;
 head = resp.headers&lt;br /&gt;
 headers = head.keys()  # or &amp;#039;for header in head&amp;#039; or &amp;#039;head.items()&amp;#039;&lt;br /&gt;
 head[&amp;#039;set-cookie&amp;#039;]&lt;br /&gt;
&lt;br /&gt;
=== URL Encode ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
&lt;br /&gt;
# urlencode a message from stdin or command parameters&lt;br /&gt;
# author: Kenneth Burgener &amp;lt;kenneth@k.ttak.org&amp;gt; (c) 2013&lt;br /&gt;
&lt;br /&gt;
import urllib&lt;br /&gt;
import sys&lt;br /&gt;
import select&lt;br /&gt;
&lt;br /&gt;
msg = &amp;quot;&amp;quot;&lt;br /&gt;
if select.select([sys.stdin,],[],[],0.0)[0]:&lt;br /&gt;
    msg = sys.stdin.readline().strip() + &amp;quot; &amp;quot;&lt;br /&gt;
if len(sys.argv) &amp;gt; 1:&lt;br /&gt;
    msg += &amp;quot; &amp;quot;.join(sys.argv[1:])&lt;br /&gt;
msg = msg.strip()&lt;br /&gt;
print urllib.quote(msg)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== cookies ===&lt;br /&gt;
&lt;br /&gt;
cookies: [http://stackoverflow.com/questions/923296/keeping-a-session-in-python-while-making-http-requests]&lt;br /&gt;
 import urllib2&lt;br /&gt;
 req1 = urllib2.Request(url1)&lt;br /&gt;
 response = urllib2.urlopen(req1)&lt;br /&gt;
 cookie = response.headers.get(&amp;#039;Set-Cookie&amp;#039;)&lt;br /&gt;
 # Use the cookie is subsequent requests&lt;br /&gt;
 req2 = urllib2.Request(url2)&lt;br /&gt;
 req2.add_header(&amp;#039;cookie&amp;#039;, cookie)&lt;br /&gt;
 response = urllib2.urlopen(req2)&lt;br /&gt;
&lt;br /&gt;
== Read web page 3.x ==&lt;br /&gt;
&lt;br /&gt;
 import urllib.request&lt;br /&gt;
 resp = urllib.request.urlopen(&amp;#039;http://www.python.org&amp;#039;)&lt;br /&gt;
 html = resp.read()&lt;br /&gt;
&lt;br /&gt;
== Convert byte characters to string ==&lt;br /&gt;
&lt;br /&gt;
 print(f.read(100).decode(&amp;#039;utf-8&amp;#039;))&lt;br /&gt;
&lt;br /&gt;
== Download File ==&lt;br /&gt;
&lt;br /&gt;
=== Download file: (2.x) ===&lt;br /&gt;
&lt;br /&gt;
 import urllib&lt;br /&gt;
 urllib.urlretrieve(url, filename)&lt;br /&gt;
&lt;br /&gt;
=== Download file: (3.x) ===&lt;br /&gt;
&lt;br /&gt;
 import urllib.request&lt;br /&gt;
 urllib.request.urlretrieve(url, filename)&lt;br /&gt;
&lt;br /&gt;
== Open web browser ==&lt;br /&gt;
&lt;br /&gt;
 import webbrowser&lt;br /&gt;
 webbrowser.open(&amp;#039;http://www.google.com&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
== HTTP Basic Authentication ==&lt;br /&gt;
&lt;br /&gt;
HTTP Basic Authentication [http://stackoverflow.com/questions/635113/python-urllib2-basic-http-authentication-and-tr-im]&lt;br /&gt;
 import urllib2, base64&lt;br /&gt;
 request = urllib2.Request(&amp;quot;http://api.foursquare.com/v1/user&amp;quot;)&lt;br /&gt;
 base64string = base64.encodestring(&amp;#039;%s:%s&amp;#039; % (username, password)).replace(&amp;#039;\n&amp;#039;, &amp;#039;&amp;#039;)&lt;br /&gt;
 request.add_header(&amp;quot;Authorization&amp;quot;, &amp;quot;Basic %s&amp;quot; % base64string)   &lt;br /&gt;
 result = urllib2.urlopen(request)&lt;br /&gt;
&lt;br /&gt;
== HTTP Basic Authentication Handler ==&lt;br /&gt;
&lt;br /&gt;
HTTP Basic Authentication Handler: [http://www.morethanseven.net/2007/11/23/archiving-twitter-data-with-python.html] [http://stackoverflow.com/questions/635113/python-urllib2-basic-http-authentication-and-tr-im] [http://www.voidspace.org.uk/python/articles/authentication.shtml#doing-it-properly]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import urllib2&lt;br /&gt;
auth = urllib2.HTTPPasswordMgrWithDefaultRealm()&lt;br /&gt;
auth.add_password(None, &amp;#039;http://twitter.com/account/&amp;#039;, username, password)&lt;br /&gt;
auth_handler = urllib2.HTTPBasicAuthHandler(auth)&lt;br /&gt;
url_opener = urllib2.build_opener(auth_handler)&lt;br /&gt;
# Note: this will change the default opener.&lt;br /&gt;
#    if you do not wish to do this, simply use &amp;quot;url_opener.open(url_request)&amp;quot; everywhere.&lt;br /&gt;
urllib2.install_opener(url_opener)&lt;br /&gt;
url_request = urllib2.Request(&amp;#039;https://api.twitter.com/1/statuses/user_timeline.json?%s&amp;#039; % twitter_args)&lt;br /&gt;
url_output = urllib2.urlopen(url_request).read()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
theurl = &amp;#039;http://10.10.10.135/image.jpg&amp;#039;&lt;br /&gt;
req = urllib2.Request(theurl)&lt;br /&gt;
base64string = base64.encodestring(&amp;#039;%s:%s&amp;#039; % (username, password))[:-1]&lt;br /&gt;
authheader =  &amp;quot;Basic %s&amp;quot; % base64string&lt;br /&gt;
req.add_header(&amp;quot;Authorization&amp;quot;, authheader)&lt;br /&gt;
resp = urllib2.urlopen(req)&lt;br /&gt;
img = resp.read()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# the following has the problem of being required to already know the realm&lt;br /&gt;
import urllib2&lt;br /&gt;
TRIM_API_URL = &amp;#039;http://api.tr.im/api&amp;#039;&lt;br /&gt;
auth_handler = urllib2.HTTPBasicAuthHandler()&lt;br /&gt;
auth_handler.add_password(realm=&amp;#039;tr.im&amp;#039;,&lt;br /&gt;
    uri=TRIM_API_URL,&lt;br /&gt;
    user=USERNAME,&lt;br /&gt;
    passwd=PASSWORD)&lt;br /&gt;
url_opener = urllib2.build_opener(auth_handler)&lt;br /&gt;
urllib2.install_opener(url_opener)&lt;br /&gt;
response = urllib2.urlopen(&amp;#039;%s/trim_simple?url=%s&amp;#039;&lt;br /&gt;
    % (TRIM_API_URL, url_to_trim))&lt;br /&gt;
url = response.read().strip()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== urllib Session Tracking ==&lt;br /&gt;
&lt;br /&gt;
Sessions Tracking:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import urllib&lt;br /&gt;
import urllib2&lt;br /&gt;
import random&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;-&amp;quot; * 10, &amp;quot;REQ1&amp;quot;, &amp;quot;-&amp;quot; * 10&lt;br /&gt;
data = {&amp;#039;username&amp;#039;: &amp;#039;test&amp;#039;,&lt;br /&gt;
        &amp;#039;password&amp;#039;: &amp;#039;password1&amp;#039;,&lt;br /&gt;
        &amp;#039;id&amp;#039;: str(random.randint(1, 100)),&lt;br /&gt;
        }&lt;br /&gt;
data = urllib.urlencode(data)&lt;br /&gt;
req1 = urllib2.Request(&amp;#039;http://demo.oeey.com/session_a.php&amp;#039;, data)&lt;br /&gt;
req1.add_header(&amp;#039;User-Agent&amp;#039;, &amp;#039;Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0&amp;#039;)&lt;br /&gt;
print &amp;quot;REQ1 HEADERS:&amp;quot;, req1.headers.items()&lt;br /&gt;
print &amp;quot;REQ1 DATA:&amp;quot;, req1.data&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;-&amp;quot; * 10, &amp;quot;RESP1&amp;quot;, &amp;quot;-&amp;quot; * 10&lt;br /&gt;
resp1 = urllib2.urlopen(req1)&lt;br /&gt;
cookie = resp1.headers.get(&amp;#039;Set-Cookie&amp;#039;)&lt;br /&gt;
print &amp;#039;RESP1 URL:&amp;#039;, resp1.geturl()  # new url, if redirected&lt;br /&gt;
print &amp;#039;RESP1 CODE:&amp;#039;, resp1.getcode()  # 200&lt;br /&gt;
print &amp;#039;RESP1 COOKIE:&amp;#039;, cookie&lt;br /&gt;
print &amp;#039;RESP1 HEADERS:&amp;#039;, resp1.headers.items()&lt;br /&gt;
print &amp;quot;RESP1 HTML:\n&amp;quot;, resp1.read()&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;-&amp;quot; * 10, &amp;quot;REQ2&amp;quot;, &amp;quot;-&amp;quot; * 10&lt;br /&gt;
data = {&lt;br /&gt;
    &amp;#039;product&amp;#039;: &amp;#039;3&amp;#039;,&lt;br /&gt;
        }&lt;br /&gt;
data = urllib.urlencode(data)&lt;br /&gt;
req2 = urllib2.Request(&amp;#039;http://demo.oeey.com/session_b.php&amp;#039;, data)&lt;br /&gt;
req2.add_header(&amp;#039;Cookie&amp;#039;, cookie)&lt;br /&gt;
req2.add_header(&amp;#039;User-Agent&amp;#039;, &amp;#039;Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0&amp;#039;)&lt;br /&gt;
print &amp;quot;REQ2 HEADERS:&amp;quot;, req2.headers.items()&lt;br /&gt;
print &amp;quot;REQ2 DATA:&amp;quot;, req2.data&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;-&amp;quot; * 10, &amp;quot;RESP2&amp;quot;, &amp;quot;-&amp;quot; * 10&lt;br /&gt;
resp2 = urllib2.urlopen(req2)&lt;br /&gt;
print &amp;#039;RESP2 URL:&amp;#039;, resp2.geturl()  # new url, if redirected&lt;br /&gt;
print &amp;#039;RESP2 CODE:&amp;#039;, resp2.getcode()  # 200&lt;br /&gt;
print &amp;#039;RESP2 HEADERS:&amp;#039;, resp2.headers.items()&lt;br /&gt;
print &amp;quot;RESP2 HTML:\n&amp;quot;, resp2.read()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
session_a.php:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// Start Session&lt;br /&gt;
session_start();&lt;br /&gt;
&lt;br /&gt;
// Test redirect - resp1.geturl()&lt;br /&gt;
//$_SESSION[&amp;#039;id&amp;#039;] = &amp;#039;redirect&amp;#039;;&lt;br /&gt;
//header(&amp;#039;Location: http://demo.oeey.com/session_b.php&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
// Show REQUEST data\&lt;br /&gt;
echo &amp;quot;Request Data: \n&amp;quot;;&lt;br /&gt;
print_r($_REQUEST);&lt;br /&gt;
&lt;br /&gt;
// $_REQUEST is combination of $_GET, $_POST and $_COOKIE.&lt;br /&gt;
if(isset($_REQUEST[&amp;#039;id&amp;#039;])) {&lt;br /&gt;
    $_SESSION[&amp;#039;id&amp;#039;] = $_REQUEST[&amp;#039;id&amp;#039;];&lt;br /&gt;
} else {&lt;br /&gt;
    $_SESSION[&amp;#039;id&amp;#039;] = rand();&lt;br /&gt;
}&lt;br /&gt;
echo &amp;quot;Request ID: &amp;quot; . $_SESSION[&amp;#039;id&amp;#039;];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
session_b.php:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// Start Session&lt;br /&gt;
session_start();&lt;br /&gt;
&lt;br /&gt;
// Show REQUEST data&lt;br /&gt;
echo &amp;quot;Request Data: \n&amp;quot;;&lt;br /&gt;
print_r($_REQUEST);&lt;br /&gt;
&lt;br /&gt;
// Show session data&lt;br /&gt;
echo &amp;quot;Session Data: \n&amp;quot;;&lt;br /&gt;
print_r($_SESSION);&lt;br /&gt;
&lt;br /&gt;
// Show ID&lt;br /&gt;
echo &amp;quot;ID: \n&amp;quot;;&lt;br /&gt;
if(isset($_SESSION[&amp;#039;id&amp;#039;])) {&lt;br /&gt;
    echo $_SESSION[&amp;#039;id&amp;#039;];&lt;br /&gt;
} else {&lt;br /&gt;
    echo &amp;quot;ID not set&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== simpler example ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
### LOGON&lt;br /&gt;
url = &amp;#039;http://apc.oeey.com/login.tgi&amp;#039;&lt;br /&gt;
values = {&amp;#039;Username&amp;#039; : &amp;#039;admin&amp;#039;,&lt;br /&gt;
          &amp;#039;Password&amp;#039; : &amp;#039;admin&amp;#039;, }&lt;br /&gt;
data = urllib.urlencode(values)&lt;br /&gt;
req = urllib2.Request(url, data)&lt;br /&gt;
response = urllib2.urlopen(req, timeout=3)&lt;br /&gt;
cookie = response.headers.get(&amp;#039;Set-Cookie&amp;#039;)&lt;br /&gt;
print cookie  # &amp;#039;DLILPC=&amp;quot;W5J/nTupJF0hyrv&amp;quot;; Version=1; Path=/&amp;#039;&lt;br /&gt;
&lt;br /&gt;
### POWER OFF&lt;br /&gt;
url = &amp;#039;http://apc.oeey.com/outlet?8=OFF&amp;#039;&lt;br /&gt;
req = urllib2.Request(url)&lt;br /&gt;
req.add_header(&amp;#039;Cookie&amp;#039;, cookie)&lt;br /&gt;
response = urllib2.urlopen(req, timeout=3)&lt;br /&gt;
&lt;br /&gt;
### LOGOUT&lt;br /&gt;
url = &amp;#039;http://apc.oeey.com/logout&amp;#039;&lt;br /&gt;
req = urllib2.Request(url)&lt;br /&gt;
req.add_header(&amp;#039;Cookie&amp;#039;, cookie)&lt;br /&gt;
response = urllib2.urlopen(req, timeout=3)&lt;br /&gt;
cookie = response.headers.get(&amp;#039;Set-Cookie&amp;#039;)&lt;br /&gt;
print cookie  # &amp;#039;DLILPC=&amp;quot;&amp;quot;; Version=1; Max-Age=0; Path=/&amp;#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== URL Cookie Session Tracking ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import urllib&lt;br /&gt;
import urllib2&lt;br /&gt;
import re&lt;br /&gt;
&lt;br /&gt;
url = &amp;#039;http://apc.oeey.com/Forms/login1&amp;#039;&lt;br /&gt;
values = {&amp;#039;login_username&amp;#039; : &amp;#039;apc&amp;#039;,&lt;br /&gt;
          &amp;#039;login_password&amp;#039; : &amp;#039;apc&amp;#039;, }&lt;br /&gt;
data = urllib.urlencode(values)&lt;br /&gt;
req = urllib2.Request(url, data)&lt;br /&gt;
response = urllib2.urlopen(req, timeout=3)&lt;br /&gt;
# exceptions:&lt;br /&gt;
#   socket.timeout: timed out&lt;br /&gt;
#   urllib2.HTTPError: HTTP Error 403: Forbidden&lt;br /&gt;
&lt;br /&gt;
print response.url  # http://apc.oeey.com/NMC/GGcOPeRq8+FWctMifeoezA/home.htm&lt;br /&gt;
&lt;br /&gt;
# get cookie&lt;br /&gt;
match = re.findall(&amp;#039;http://apc.oeey.com/NMC/(.*)/home.htm&amp;#039;, response.url)&lt;br /&gt;
print match&lt;br /&gt;
cookie = match[0]&lt;br /&gt;
&lt;br /&gt;
# use cookie:&lt;br /&gt;
url2 = &amp;#039;http://apc.oeey.com/NMC/{}/Forms/outlctrl1&amp;#039;.format(cookie)&lt;br /&gt;
values2 = { &amp;#039;rPDUOutletCtrl&amp;#039;: &amp;#039;4&amp;#039;,&lt;br /&gt;
            &amp;#039;OL_Cntrl_Col1_Btn&amp;#039;: &amp;#039;?8,2&amp;#039;,&lt;br /&gt;
            &amp;#039;submit&amp;#039;: &amp;#039;Next &amp;gt;&amp;gt;&amp;#039;}&lt;br /&gt;
data2 = urllib.urlencode(values2)&lt;br /&gt;
req2 = urllib2.Request(url2, data2)&lt;br /&gt;
response2 = urllib2.urlopen(req2)&lt;br /&gt;
print response2.url&lt;br /&gt;
&lt;br /&gt;
# logoff:&lt;br /&gt;
url6 = &amp;#039;http://apc.oeey.com/NMC/{}/logout.htm&amp;#039;.format(cookie)&lt;br /&gt;
req6 = urllib2.Request(url6)&lt;br /&gt;
response6 = urllib2.urlopen(req6)&lt;br /&gt;
print response6.url  # http://apc.oeey.com/NMC/X7tmWWC4oYI0Z4hQbnlLaQ/logout.htm&lt;br /&gt;
#html = response6.read()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kenneth</name></author>
	</entry>
</feed>