2016-05-13 63 views
4

因此,我目前正在开发一个下载程序,因此我需要从输入的网页中获取.m3u8链接。我制作了程序并且工作正常,但是对于高级独家视频,它无法访问链接,因为除非您已登录,否则链接不会显示在日志中。我想实现登录if您有一个帐户,并且我一直在使用请求发布登录信息以及每次登录时都需要的身份验证密钥(_token),但无济于事。我登录,然后在r变量中尝试访问高级独家视频,但链接仍然不存在。以下是我的代码中的登录部分,我明显用用户名和密码替换了我的帐户详细信息,但如果有人能帮我解决,我会非常感激,但我仍然对python比较陌生,谢谢!需要帮助搞清楚如何在python中发送POST登录信息

...另外,我登录到Fiddler打开的网站,以便我可以看到发布的内容,试图更好地理解该过程,并将该字符串存储在'actual_POST'下以供参考。

s = requests.Session() 

url = "https://roosterteeth.com/login" 
payload = {'username': 'password', 'password': 'password', '_token': 'GCZLoBNyjFrN2SReFjEydkN6qx6NT5hU8jVfyZOl'} 
actual_POST = '_token=GCZLoBNyjFrN2SReFjEydkN6qx6NT5hU8jVfyZOl&username=username&password=password&redirectTo=http%3A%2F%2Froosterteeth.com%2F' 

with s as j: 
    b = s.post(url, data=payload, headers={'User-Agent': 'Mozilla/5.0'}) 
    r = s.get('http://roosterteeth.com/episode/rt-sponsor-cut-season-2-sponsor-play-alien-isolation-dlc') 
    print(r.text) 
+0

欢迎堆栈溢出!这是一个很好的第一个问题。我注意到的一件事是,你正在用's'来做',然后用's'来引用它。尝试将该引用更改为'j'? –

+0

我认为'用requests.Session()作为s:'会更好。 – DaSourcerer

回答

1

不能使用一个_token您从浏览器中的拉,你需要做一个请求和响应解析_token然后使用在后:

import requests 
from bs4 import BeautifulSoup 
url = "https://roosterteeth.com/login" 
payload = {'username': 'dyour_user', 'password': 'your_pass', 

      "redirectTo":"http://roosterteeth.com/"} 
headers= {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36'} 

with requests.Session() as s: 
    r = s.get(url) 
    payload["_token"] = BeautifulSoup(r.text).select_one("input[name=_token]")["value"] 
    b = s.post(url, data=payload, headers=headers, allow_redirects=1) 
    print(BeautifulSoup(b.text,"lxml").select("p.username")) 

如果我们运行上面用我的登录信息的代码,你可以看到我们是成功的:

In [21]: url = "https://roosterteeth.com/login" 

In [22]: payload = {'username': 'xxxxx', 'password': 'xxxxx', 
    ....: 
    ....:   "redirectTo": "http://roosterteeth.com/"} 

In [23]: headers = { 
    ....:  'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36'} 

In [24]: with requests.Session() as s: 
    ....:   r = s.get(url) 
    ....:   payload["_token"] = BeautifulSoup(r.text,"lxml").select_one("input[name=_token]")["value"] 
    ....:   b = s.post(url, data=payload, headers=headers, allow_redirects=1) 
    ....:   print(BeautifulSoup(b.text, "lxml").select("p.username")) 
    ....:  
[<p class="username"><a href="javascript:void"> 
         xxxxx 
               <i class="icon ion-arrow-down-b"></i> 
</a></p>] 
+1

非常感谢!这真的很好,我不知道该令牌是从浏览器中提取的,认为它只是网站本身 – Hendo16

-1

发送时,需要登录第一个API的数据,我用请求的cookiejar功能得到了周围我有类似这样的问题 - 尝试这个 -

import requests 
url = "https://roosterteeth.com/login" 
url2 = "http://roosterteeth.com/episode/rt-sponsor-cut-season-2-sponsor-play-alien-isolation-dlc" 
payload = {'username': 'password', 'password': 'password', '_token': 'GCZLoBNyjFrN2SReFjEydkN6qx6NT5hU8jVfyZOl'} 
s = requests.Session() 
c = s.get(url, params=payload) 
r = c.cookies 

t = requests.get(url2, cookies = r) 
print(t.text) 
相关问题