2014-09-20 24 views
1

通過python我想使用urllib,urllib2,cookielib(無需下載模塊)發佈fb狀態。我會成功登錄,但是我發佈狀態的代碼不起作用。我會檢查狀態消息框和發佈框的元素(對於m.facebook),並且狀態消息框'name'是狀態,並且發佈框的'值'是Post,但它不會在發佈時發佈狀態嘗試。我該如何做這項工作?Python - 通過與urllib2通過會話登錄時發佈Facebook狀態

import urllib2, urllib, cookielib                               


class Acc:                               
    jar = cookielib.CookieJar()                               
    cookie = urllib2.HTTPCookieProcessor(jar)                                
    opener = urllib2.build_opener(cookie)                               

    def login(self):                               
     try:                               
      params = urllib.urlencode({'email':'[email protected]','pass':'password','login':'Log+In'})                               
      req = urllib2.Request('http://m.facebook.com/login.php?m=m&refsrc=m.facebook.com%2F', params)                               
      res = self.opener.open(req)                               
      html = res.read()                               


     except urllib2.HTTPError, e:                               
      print e.msg                               
     except urllib2.URLError, e:                               
      print e.reason[1]                               
     return False                               

    def fetch(self,url):                               
     req = urllib2.Request(url,None)                               
     res = self.opener.open(req)                               
     return res.read(), res.headers.get("Set-Cookie")                               

bla = Acc()                               
bla.login()                               
webpage, session = bla.fetch("http://m.facebook.com/login.php?m=m&refsrc=m.facebook.com%2F")                               
if "Logout" in webpage:                               
    print("Logged in cuzzie")                               

print("Sending Post")                               
post = urllib.urlencode({'status':'message','Post':'Post'})                               
a = urllib2.Request("http://m.facebook.com/")                               
a.add_header("cookie", session)                               
g = urllib2.urlopen(a, post)                               
print("Post Sent")                               

回答

2

有哪些正在發送類似CSID許多隱藏屬性,fb_dtsg ...

如果您使用的是Chrome,你可以只發佈一個狀態後,看到在開發工具的網絡標籤。 POST請求將發送到「https://m.facebook.com/a/home.php」,您可以查看「表單數據」以查看請求中發送的所有字段。我認爲fb_dtsg和csid是您需要從登錄響應頁面獲取的每個fb文章所必需的。

+1

你能否解釋更多如何捕捉這樣的請求? – user3818650 2014-09-20 10:19:07

+2

簡單的步驟,如果使用鉻 0)打開fb頁面與帖子對話框準備 1)檢查元素2)轉到網絡選項卡3)按清除按鈕以清除先前的會話,並點擊「記錄網絡日誌」4)然後發佈一些內容,查看已發送的第一個請求。在Headers選項卡中向下滾動到Form數據以檢查發送的有效負載是什麼。查看此鏈接https://developer.chrome.com/devtools/docs/network以獲得更深入的瞭解。 – 2014-09-20 14:13:25

+2

也請查看http://stackoverflow.com/questions/9163251/chrome-source-of-post-data – 2014-09-20 14:20:18