• 接口登录CSDN发布博客---封装方法,使用unittest框架


    一个简单的跑接口流程:登录后发表带图片的博客。这里涉及到的知识点:

    1、登录时通过cookies去保持登录状态,把cookies添加到一个session中,这样可以保持长时间登录状态;

    2、我们通过爬虫获取页面的title标签的文本判断登录成功;

    3、通过抓包找到上传图片的地址,通过post方式来上传图片;

    4、抓包找到发布博客的地址,最后发布博客;

    5、使用了unittest框架来完成接口流程测试,作为一个测试用例。

    ApiMethod.py的代码如下:

     1 # coding:utf-8
     2 import requests
     3 from bs4 import BeautifulSoup
     4 class ApiMethod():
     5     def __init__(self,userAgent):
     6         self.h = {"User-Agent": userAgent}
     7     #通过session来登录CSDN,保持一直登录状态
     8     def loginCsdn(self):
     9         try:
    10             s= requests.session()
    11             c = requests.cookies.RequestsCookieJar()
    12             c.set("UserInfo","ltxlmnyec9obNIiCirM0KBmlYeijHfUcQ%2BZE7J%2B%2Ffk1djT8xd36OsnAqrYJ46KvVN8f%2BdG6KiVfFSHuxAmSJTT8VFZF%2FpmyBVj3McsPss%2FAH6gR3SuyN3ms9A9pd7xaq8T%2FZ%2Fcr5ZOVFqSGjNvpRqQ%3D%3D")
    13             c.set("UserNick","%E9%A3%8E%E6%A5%9A%E9%A2%9C")
    14             c.set("AU","FCF")
    15             c.set("Hm_lpvt_6bcd52f51e9b3dce32bec4a3997715ac","1521982541")
    16             c.set("dc_tos","p65d8s")
    17             c.set("UserName","maybe_frank")
    18             s.cookies.update(c)
    19             re = s.get("https://mp.csdn.net/postedit",headers = self.h)
    20             soup = BeautifulSoup(re.content,"html.parser")
    21             title = soup.title.string
    22             if title == "写文章-CSDN博客":
    23                 print("登录成功!")
    24             else:
    25                 print("登录失败")
    26             return s
    27         except Exception as e:
    28             print(e)
    29 
    30     def upload(self,session,urlPath,fileName,file):
    31         try:
    32             f = {"file":(fileName,open(file,"rb"),"image/png")}
    33             re = session.post(url=urlPath,headers = self.h,files = f)
    34             return re.json()["content"]
    35         except Exception as e:
    36             print(e)
    37 
    38     def write(self,session,urlPath,data):
    39         try:
    40             body = data
    41             re = session.post(url=urlPath,headers = self.h,data=body)
    42             #返回上传图片后的图片url
    43             return  re.json()["content"]
    44         except Exception as e:
    45             print(e)
    46 
    47 
    48 if __name__ == '__main__':
    49     sf = ApiMethod("Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0")
    50     s = sf.loginCsdn()
    51     sf.upload(s,"https://mp.csdn.net/UploadImage","Q1.png","C:\Users\ztf.YFK\Desktop\1.png")
    52     data = {"titl":"wers",
    53              "typ":1,
    54              "cont":'<p>上传文件:</p><p><img src="https://img-blog.csdn.net/20180326110705916" alt="" /><br /></p>',
    55              "categories":"接口",
    56              "chnl":16,
    57              "level":0,
    58              "tag2":"",
    59              "artid":0,
    60              "private":"false",
    61              "stat":"publish"}
    62     content = sf.write(s,"https://mp.csdn.net/postedit/saveArticle?isPub=1",data)
    63     print(content)

    write.py的代码如下:

     1 from csdn.apiMethod import ApiMethod
     2 import unittest
     3 import time
     4 import random
     5 class WriteBlog(unittest.TestCase):
     6     @classmethod
     7     def setUpClass(cls):
     8         cls.sf = ApiMethod("Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0")
     9         cls.s = cls.sf.loginCsdn()
    10 
    11     @classmethod
    12     def tearDownClass(cls):
    13         pass
    14 
    15     def test_writeBlog(self):
    16         file_url = self.upload(self.s,"https://mp.csdn.net/UploadImage","Q1.png","C:\Users\ztf.YFK\Desktop\1.png")
    17         print("上传文件后的url:",end="")
    18         print(file_url)
    19         #发布博客时的传的body的数据
    20         num= random.randint(1,1000)
    21         self.data = {"titl":"wers%s"%num,
    22          "typ":1,
    23          "cont":'<p>上传文件:</p><p><img src="https://img-blog.csdn.net/20180326110705916" alt="" /><br /></p>',
    24          "categories":"接口",
    25          "chnl":16,
    26          "level":0,
    27          "tag2":"",
    28          "artid":0,
    29          "private":"false",
    30          "stat":"publish"}
    31 
    32         #调用发布博客接口
    33         content = self.sf.write(self.s,"https://mp.csdn.net/postedit/saveArticle?isPub=1",self.data)
    34         print(content)
    35         #self.assertTrue(self,content,"发布成功!")
    36         self.assertEqual(self,content,"发布成功","调用发布博客接口请求失败!")
    37 
    38     if __name__ == '__main__':
    39         unittest.main()

    运行后,可以去CSDN博客查看是否发布成功。代码经实际调试可以跑成功。

  • 相关阅读:
    Welcome to Swift (苹果官方Swift文档初译与注解十一)---70~76页(第二章)
    Welcome to Swift (苹果官方Swift文档初译与注解十)---63~69页(第二章)
    Welcome to Swift (苹果官方Swift文档初译与注解九)---58~62页(第二章)
    Welcome to Swift (苹果官方Swift文档初译与注解六)---35~44页 (第一章完)
    CSS3如何实现2D转换和3D转换,他们有何区别
    表格列布局系列如何灵活把握列宽
    如何将多行数据以分组的形式对齐到单元格的上,中或下位置
    媒体查询的应用以及在css3中的变革
    样式表优先级顺序
    创建热点区域
  • 原文地址:https://www.cnblogs.com/fukun/p/8651314.html
Copyright © 2020-2023  润新知