Python3相同的url,使用urllib.request失败但请求成功?

时间:2015-06-24 16:00:09

标签: python python-3.x python-requests urllib

我感到困惑。 我的想法是,我想向网址发送请求,然后在网页中提取POST数据,然后发送到网页。当我在python中使用urllib.request时,我失败了,但是我使用了请求,它的工作原理! 请告诉我为什么.... 这是代码,注释是使用urllib.request

的代码
import urllib.request
import http.cookiejar
import re
import requests


loginUrl='https://passport.csdn.net/account/login?from=http://my.csdn.net/my/mycsdn'

#Here is the urllib.request code
#cookies=http.cookiejar.MozillaCookieJar()
#handler=urllib.request.HTTPCookieProcessor(cookies)
#opener=urllib.request.build_opener(handler)
headers={
        'Origin': 'http://passport.csdn.net',
        'Referer':'http://passport.csdn.net/account/login?from=http%3A%2F%2Fmy.csdn.net%2Fmy%2Fmycsdn',
        'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.99 Safari/537.36 LBBROWSER'
        }

#Here is the requests code
s = requests.Session()
data = s.get(loginUrl)
data = data.text
#request = urllib.request.Request(loginUrl)
#response = urllib.request.urlopen(request)
#data = response.read().decode('utf-8')


#l get the value of lt and execution from the web page
pattern_lt = re.compile('<input type="hidden" name="lt" value="(.*?)" />',re.S)
lt = re.findall(pattern_lt,data)
lt = lt[0]
pattern_exe = re.compile('<input type="hidden" name="execution" value="(.*?)" />',re.S)
exe = re.findall(pattern_exe,data)
exe = exe[0]
postDict = {
        'username':'qinyufeng_hdq@163.com',
        'password':'csdn690076598',
        'lt':lt,
        'execution':exe,
        '_eventId':'submit'
        }
r = s.post(loginUrl, data=postDict)
#postData = urllib.parse.urlencode(postDict).encode()
#request = urllib.request.Request(loginUrl, postData,headers)
#response = opener.open(request)
#data = response.read().decode('UTF-8')
print (r.text)

我不擅长英语,我希望你能理解我的想法并感谢你阅读我的问题。

0 个答案:

没有答案