这几天刚接触python,然后想写一个python登录csdn。
http请求头:
GET /ajax/accounthandler.ashx?t=log&u=用户名&p=密码&remember=0&f=http%3A%2F%2Fwww.csdn.net%2F&rand=0.45487874305576215 HTTP/1.1
Host: passport.csdn.net
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0
Accept: */*
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
X-Requested-With: XMLHttpRequest
Referer: https://passport.csdn.net/account/loginbox?callback=logined&hidethird=1&from=http%3a%2f%2fwww.csdn.net%2f
Cookie: __utma=17226283.47404085.1384827908.138482908.138521946.2; __utmz=1722623.138487908.1.1.utmcsr=(direct)|utmcmd=(none); uuid_tt_dd=-5371506010083293_20131119; UN=用户名; __utmb=172262.2.10.138212946; __utmc=1226283; pvg=mwpxe
Connection: keep-alive
Python代码
# -*- coding: utf-8 -*-
import sys
import urllib
import urllib2
import cookielib
import httplib
#定义需要进行发送的数据
params = urllib.urlencode({ 'f':'http://www.csdn.net/',
'p':'密码',
'rand':'0.45487874305576215',
'remember':'0',
't':'log',
'u':'用户名'
})
#定义一些文件头
headers = {"Content-Type":"application/json; charset=utf-8",
"Connection":"Keep-Alive",
"Referer":"https://passport.csdn.net/account/loginbox?callback=logined&hidethird=1&from=http%3a%2f%2fwww.csdn.net%2f"}
#与网站构建一个连接
conn = httplib.HTTPConnection("passport.csdn.net")
#开始进行数据提交 同时也可以使用get进行
conn.request(method="get",url="/ajax/accounthandler.ashx",body=params,headers=headers)
print conn.request
#返回处理后的数据
response = conn.getresponse()
#判断是否提交成功
if response.status == 302:
print "发布成功!^_^!"
else:
print "发布失败\^0^/"
#关闭连接
conn.close();
执行后,始终无法成功,希望,大神帮忙找下原因!
刚刚试了下,以下代码可以登录成功!
还望高手帮忙指点下,看有没有其他方式可以实现的!
url="http://passport.csdn.net/ajax/accounthandler.ashx?t=log&u=用户名&p=密码&remember=0&f=http%3A%2F%2Fwww.csdn.net%2F&rand=0.7234140924664091"
request = urllib2.Request(url)
request.add_header("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0")
request.add_header("Host","passport.csdn.net")
request.add_header("Accept","*/*")
request.add_header("Accept-Language","zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3")
request.add_header("Accept-Encoding","gzip, deflate")
request.add_header("X-Requested-With","XMLHttpRequest")
request.add_header("Referer","https://passport.csdn.net/account/loginbox?callback=logined&hidethird=1&from=http%3a%2f%2fwww.csdn.net%2f")
request.add_header("Connection","keep-alive")
f = urllib2.urlopen(request)
print f.read()
多谢“weakish ”的指点,使用requests模块之后的代码如下:
import requests
def login(username,password):
#get参数
payload = {'u': username,'p': password,'t':'log','rember':0,'f':'http://www.csdn.net'}
url="http://passport.csdn.net/ajax/accounthandler.ashx"
#http请求头
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0",
"Host":"passport.csdn.net",
"Accept":"*/*",
"Accept-Language":"zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3",
"Accept-Encoding":"gzip, deflate",
"X-Requested-With":"XMLHttpRequest",
"Referer":"https://passport.csdn.net/account/loginbox?callback=logined&hidethird=1&from=http%3a%2f%2fwww.csdn.net%2f",
"Connection":"keep-alive"
}
r = requests.get(url,params = payload,headers=headers)
print r.text