Python - 通过与urllib2的会话登录时发布Facebook状态

时间:2014-09-20 02:47:18

标签: python facebook session-cookies urllib2 urllib

通过python我想使用urllib,urllib2,cookielib(不下载模块)发布fb状态。我会成功登录,但是我发布状态的代码不起作用。我会检查状态消息框和邮箱的元素(对于m.facebook)和状态消息框' name'是状态和价值'邮政信箱是邮政,但我试试时不会发布状态。我怎样才能做到这一点?

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':'user@hotmail.com','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")                                                                                                                        

1 个答案:

答案 0 :(得分:2)

有许多隐藏属性正在发送,如csid,fb_dtsg ...

如果您使用的是Chrome,则可以在发布状态后立即在开发人员工具中查看网络选项卡。 POST请求将发送到" https://m.facebook.com/a/home.php",您可以查看"表单数据"查看请求中发送的所有字段。我认为你需要从登录响应页面获取的每个fb帖子都需要fb_dtsg和csid。