中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么用requests構建API

發布時間:2021-12-17 15:07:14 來源:億速云 閱讀:155 作者:iii 欄目:大數據

這篇文章主要講解了“怎么用requests構建API”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“怎么用requests構建API”吧!

思路分析

發送私信的過程就是瀏覽器向服務器發送一個 HTTP 請求,請求報文包括請求 URL、請求頭 Header、還有請求體 Body,只要把這些信息弄清楚,那么就很容易用 requests 來模擬瀏覽器發送私信了。

打開 Chrome 瀏覽器,隨便找一個用戶,點擊發送私信,追蹤一下私信的網絡請求過程。

先看下請求頭信息

怎么用requests構建API

請求頭 Header 中有 cookies 登錄信息,此外還有一個 authorization 字段,該字段是用于用戶認證的,同時這個字段也存在 cookies 中(為了防止 cookie 信息泄露,我打了馬賽克), requests 請求時這些信息都必須攜帶上。

再來看看請求的URL和請求體

怎么用requests構建API

請求URL是 https://www.zhihu.com/api/v4/messages ,請求方法是 POST,請求體

{"type":"common","content":"你好,我是pythoner","receiver_hash":"1da75b85900e00adb072e91c56fd9149"}

請求體是一個 json 字符串,type 和 content 很好理解,但 receiver_hash 是什么并不知道,需要進一步確定,不過你應該猜得出這是類似于用戶 id 的字段。

那么現在問題來了,如何通過用戶主頁的URL找到用戶的 id 呢?為了完整的模擬私信的整個流程,我特地注冊了一個知乎小號。

如果你手頭沒有多余的手機號,可以用 Google 搜「receive sms online」,網上很多提供免費在線接收短信的手機號碼,我注冊的小號主頁:https://www.zhihu.com/people/xiaoxiaodouzi

先嘗試關注小號,然后在我關注的列表中找到該小號,把鼠標移到小號的頭像處時,發現有一個 HTTP 網絡請求。

怎么用requests構建API

請求 url 是 https://www.zhihu.com/api/v4/members/xiaoxiaodouzi ,這個URL的后面部分「xiaoxiaodouzi」對應小號主頁URL的后面部分,這部分我們稱之為 url_token。

接口的返回數據是該用戶的個人公開信息。

{  
   ...
   "id":"1da75b85900e00adb072e91c56fd9149",
   "favorite_count":0,
   "voteup_count":0,
   "commercial_question_count":0,
   "url_token":"xiaoxiaodouzi",
   "type":"people",
   "avatar_url":"https://pic1.zhimg.com/v2-ca13758626bd7367febde704c66249ec_is.jpg",
   "is_active":1492224390,
   "name":"\u6211\u662f\u5c0f\u53f7",
   "url":"http://www.zhihu.com/api/v4/people/1da75b85900e00adb072e91c56fd9149",
   "gender":-1
   ...
}

我們可以很清楚的看到有個id的字段,跟我們之前猜測的一樣,私信里面的 receiver_hash 字段就是用戶的id。

代碼實現

到此我們把私信功能的思路理清楚了,代碼實現就是水到渠成的事情了。

用戶信息

為了得到私信接口需要的 receiver_hash 字典,我們先要獲取用戶信息,該信息里面含有用于的id值。

@need_login
def user(self, url_token):
    """
    獲取用戶信息,
    :param url_token:
        url_token 是用戶主頁url中后面部分
        例如: https://www.zhihu.com/people/xiaoxiaodouzi
        url_token 是 xiaoxiaodouzi
    :return:dict
    """
    response = self._session.get(URL.profile(url_token))
    return response.json()

發送私信

@need_login
def send_message(self, user_id, content):
    """
    給指定的用戶發私信
    :param user_id: 用戶ID
    :param content: 私信內容
    """
    data = {"type": "common", "content": content, "receiver_hash": user_id}
    response = self._session.post(URL.message(), json=data)
    data = response.json()
    if data.get("error"):
        self.logger.info("私信發送失敗, %s" % data.get("error").get("message"))
    else:
        self.logger.info("發送成功")
    return data

上面兩個方法放在一個叫Zhihu的類里面,我只列出了關鍵代碼,涉及到的 @need_login 是一個用戶認證的裝飾器,表示該方法需要登錄后才能操作。細心的你可能發現,每個請求中我并沒有顯示地指定 Header 字段,那時因為我把它放在 __init__.py 方法中初始化了。

def __init__(self):
   self._session = requests.session()
   self._session.verify = False
   self._session.headers = {"Host": "www.zhihu.com",
                            "Referer": "https://www.zhihu.com/",
                            'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36'
                                          ' (KHTML, like Gecko) Chrome/56.0.2924.87',
                            }
   self._session.cookies = cookiejar.LWPCookieJar(filename=cookie_filename)
   try:
       self._session.cookies.load(ignore_discard=True)
   except:
       pass

調用執行

from zhihu import Zhihu

if __name__ == '__main__':
    zhihu = Zhihu()
    profile = zhihu.user("xiaoxiaodouzi")
    _id = profile.get("id")
    zhihu.send_message(_id, "你好,這是來自Python之禪的問候")

執行完成后,小號成功收到我發送的私信。

感謝各位的閱讀,以上就是“怎么用requests構建API”的內容了,經過本文的學習后,相信大家對怎么用requests構建API這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

兴城市| 灵武市| 永新县| 丰都县| 固镇县| 简阳市| 时尚| 安远县| 平谷区| 连平县| 佛坪县| 婺源县| 华阴市| 阿合奇县| 济南市| 通城县| 若尔盖县| 察隅县| 湟中县| 西盟| 陇西县| 台北市| 平塘县| 通山县| 苏尼特右旗| 大安市| 万安县| 教育| 德惠市| 聂拉木县| 北流市| 天长市| 紫阳县| 娄烦县| 阳东县| 丹凤县| 巩义市| 攀枝花市| 梨树县| 韶山市| 高台县|