2016-05-13 61 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) 
相關問題