2014-01-28 190 views
0

我在python中有授权问题。我想自动进入网站,但我不能。我用许多图书馆:抓住,urlib2,请求,但我从来没有进入( 对于检查自己,我进入pege与账户数据 这是真正的网站,登录名和密码授权问题

URL="http://pin-im.com/accounts/login/" 
LOGIN="testuser" 
PASSWORD="test12345user" 

urlib2:

def authorization(): 
import urllib2 

gh_url = 'http://pin-im.com/accounts/login/' 
gh_user= 'testuser' 
gh_pass = 'test12345user' 

req = urllib2.Request(gh_url) 

password_manager = urllib2.HTTPPasswordMgrWithDefaultRealm() 
password_manager.add_password(None, gh_url, gh_user, gh_pass) 

auth_manager = urllib2.HTTPBasicAuthHandler(password_manager) 
opener = urllib2.build_opener(auth_manager) 

urllib2.install_opener(opener) 

handler = urllib2.urlopen(req) 

抢:

def autorization(): 
g = Grab() 
g.setup(post={'username':'testuser', 'Password':'test12345user', 'act': 'submit'}) 
g.go("http://pin-im.com/accounts/login/") 
g.go("http://pin-im.com/user/my-profile/") 
print g.response.code 

请求(我使用授权,请求库的所有方法,其中之一):

​​

我很绝望,你能帮我登录这个网站吗?我做错了什么?

回答

0
userData = "Basic " + ("testuser:test12345user").encode("base64").rstrip() 
req = urllib2.Request('http://pin-im.com/accounts/login') 
req.add_header('Accept', 'application/json') 
req.add_header("Content-type", "application/x-www-form-urlencoded") 
req.add_header('Authorization', userData) 
res = urllib2.urlopen(req) 
+0

嗯...你在发布之前都尝试吗? – oxyum

0

本网站使用CSRFprotection,所以你应该得到csrftoken cookie并与您的请求发送回服务器:

import Cookie 
from urllib import urlencode 

import httplib2 


URL="http://pin-im.com/accounts/login/" 
LOGIN="testuser" 
PASSWORD="test12345user" 

http = httplib2.Http() 

response, _ = http.request(URL) 

cookies = Cookie.BaseCookie() 
cookies.load(response["set-cookie"]) 
csrftoken = cookies["csrftoken"].value 

headers = {'Content-type': 'application/x-www-form-urlencoded'} 
headers['Cookie'] = response['set-cookie'] 

data = { 
    "csrfmiddlewaretoken": csrftoken, 
    "username":LOGIN, 
    "password": PASSWORD 
} 

response, _ = http.request(URL, "POST", headers=headers, body=urlencode(data)) 

response, content = http.request(
    "http://pin-im.com/user/my-profile/", 
    "GET", 
    headers={'Cookie': response['set-cookie']} 
) 
print response, content 
+0

我尝试过使用此答案的授权,但我没有登录。随着Oxyum的回答,我有状态代码302. – Vakhrushev

+0

它是该网站的预期行为。您应该从该答案中获取Cookie,并将其用于所有其他请求。 我通过打开** my-profile **页面更新了代码。 – oxyum