我尝试使用以下代码登录GitHub:
url = 'https://github.com/login'
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36',
'login':'username',
'password':'password',
'authenticity_token':'Token that keeps changing',
'commit':'Sign in',
'utf8':'%E2%9C%93'
}
res = requests.post(url)
print(res.text)
现在,res.text
打印登录页面的代码。我明白这可能是因为令牌不断变化。我也尝试将网址设置为https://github.com/session
,但这也不起作用。
任何人都可以告诉我一种生成令牌的方法。我正在寻找一种不使用API登录的方法。我问another question我提到我无法登录的地方。一条评论说我做得不对,可以在没有Github API帮助的情况下使用请求模块登录。
我:
那么,我可以使用POST方法登录Facebook或Github吗?我试过了,但没有用。
用户:
好吧,大概是你做错了什么
有谁能告诉我我做错了什么?
在关于使用会话的建议之后,我更新了我的代码:
s = requests.Session()
headers = {Same as above}
s.put('https://github.com/session', headers=headers)
r = s.get('https://github.com/')
print(r.text)
我仍然无法通过登录页面。
答案 0 :(得分:2)
我认为您回到登录页面是因为您被重定向,并且由于您的代码没有发回您的Cookie,因此您无法进行会话。
您正在寻找会话持久性,"SELECT
col1 AS ("SELECT difin FROM languge WHERE word = 'col1' "),
col2 AS ("SELECT difin FROM languge WHERE word = 'col2' ")
FROM my_table "
提供它:
会话对象Session对象允许您持久化 跨请求的参数。它还可以在所有内容中保留cookie 从Session实例发出的请求,并将使用urllib3' s 连接池。因此,如果您要向同一个人提出多个请求 主机,将重用底层TCP连接,这可能导致 显着的性能提升(请参阅HTTP持久性 连接)。
requests
答案 1 :(得分:0)
您还可以尝试使用PyGitHub API执行常见的git任务。 检查以下链接: https://github.com/PyGithub/PyGithub
答案 2 :(得分:0)
此代码可完美运行
headers = {
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
}
login_data = {
'commit': 'Sign in',
'utf8': '%E2%9C%93',
'login': 'your-username',
'password': 'your-password'
}
with requests.Session() as s:
url = "https://github.com/session"
r = s.get(url, headers=headers)
soup = BeautifulSoup(r.content, 'html5lib')
login_data['authenticity_token'] = soup.find('input', attrs={'name': 'authenticity_token'})['value']
r = s.post(url, data=login_data, headers=headers)
答案 3 :(得分:0)
实际上,在post方法中,请求参数应该在请求正文中,而不是在标头中。因此,登录数据应该在data参数中。
对于github,真实性令牌存在于使用BeautifulSoup库提取的输入标签的value属性中。
此代码可以正常工作
Policy