<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                weibo.com 提供公開的 API窗口。 我們可以利用這個API來登錄。 本小節放到了 httplib2下面;但實際上我用一個新的庫來完成這個操作。 它就是:requests。 很多人都覺得urllib, httplib不太好用。 requests出現相對來說比較晚,使用起來方便很多。 網址:http://docs.python-requests.org/en/latest/ requests 是需要安裝的。 ~~~ sudo easy_install requests ~~~ ### 登錄weibo.com原理 我們通過一個登錄weibo.com的例子來說明。 登錄weibo.com的原理見: [http://www.douban.com/note/201767245/](http://www.douban.com/note/201767245/) [http://blog.vsharing.com/liyu2012/A1447194.html](http://blog.vsharing.com/liyu2012/A1447194.html) 為了防止以上文章被刪除,我轉載到本站論壇: [http://uliweb.clkg.org/forum/3/168](http://uliweb.clkg.org/forum/3/168) [http://uliweb.clkg.org/forum/3/169](http://uliweb.clkg.org/forum/3/169) 摘抄重要的原理部分: ~~~ 1, 在提交POST請求之前, 需要GET 獲取兩個參數。 地址是:http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.3.18) 得到的數據中有 "servertime" 和 "nonce" 的值, 是隨機的,其他值貌似沒什么用。 2, 通過httpfox 觀察POST 的數據, 參數較復雜,其中 “su" 是加密后的username, "sp"是加密后的password。"servertime" 和 ”nonce" 是上一步得到的。其他參數是不變的。 username 經過了BASE64 計算: username = base64.encodestring( urllib.quote(username) )[:-1]; password 經過了三次SHA1 加密, 且其中加入了 servertime 和 nonce 的值來干擾。 即: 兩次SHA1加密后, 將結果加上 servertime 和 nonce 的值, 再SHA1 算一次。 ~~~ ### 用 request的session登錄 這樣后來的每次訪問都可以繼承以前的session,系統會保存一些登錄信息。 ~~~ session = requests.session( headers={ 'User-Agent': 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.1 (KHT' 'ML, like Gecko) Chrome/21.0.1180.89 Safari/537.1' } ) resp = session.get( 'http://login.sina.com.cn/sso/prelogin.php?entry=weibo&callback=sina' 'SSOController.preloginCallBack&su=%s&client=%s' % (base64.b64encode(username), WBCLIENT) ) ~~~ 上面的步驟是取得 "servertime" 和 "nonce" 的值 通過正則表達式,分離出 servertime,nonce。。。 ~~~ pre_login_str = re.match(r'[^{]+({.+?})', resp.content).group(1) pre_login_json = json.loads(pre_login_str) ~~~ ### 登錄請求的數據 ~~~ data = { 'entry': 'weibo', 'gateway': 1, 'from': '', 'savestate': 7, 'useticket': 1, 'ssosimplelogin': 1, 'su': base64.b64encode(urllib.quote(username)), 'service': 'miniblog', 'servertime': pre_login_json['servertime'], 'nonce': pre_login_json['nonce'], 'pcid': pre_login_json['pcid'], 'vsnf': 1, 'vsnval': '', 'pwencode': 'wsse', 'sp': sha1(sha1(sha1(password)) + str(pre_login_json['servertime']) + pre_login_json['nonce']), 'encoding': 'UTF-8', 'url': 'http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.si' 'naSSOController.feedBackUrlCallBack', 'returntype': 'META' } ~~~ ### 開始登錄 ~~~ resp = session.post( 'http://login.sina.com.cn/sso/login.php?client=%s' % WBCLIENT, data=data ) ~~~ ### 登錄成功后獲取用戶信息 ~~~ login_url = re.search(r'replace\([\"\']([^\'\"]+)[\"\']', resp.content).group(1) resp = session.get(login_url) login_str = re.match(r'[^{]+({.+?}})', resp.content).group(1) ~~~ ### 查看用戶 uid 并且通過uid訪問用戶的頁面 ~~~ uid = login_info['userinfo']['uniqueid'] url = "http://weibo.com/u/"+uid resp = session.get(url) ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看