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

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

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

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

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

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

ApiMethod.py的代码如下:

 # coding:utf-8
import requests
from bs4 import BeautifulSoup
class ApiMethod():
def __init__(self,userAgent):
self.h = {"User-Agent": userAgent}
#通过session来登录CSDN,保持一直登录状态
def loginCsdn(self):
try:
s= requests.session()
c = requests.cookies.RequestsCookieJar()
c.set("UserInfo","ltxlmnyec9obNIiCirM0KBmlYeijHfUcQ%2BZE7J%2B%2Ffk1djT8xd36OsnAqrYJ46KvVN8f%2BdG6KiVfFSHuxAmSJTT8VFZF%2FpmyBVj3McsPss%2FAH6gR3SuyN3ms9A9pd7xaq8T%2FZ%2Fcr5ZOVFqSGjNvpRqQ%3D%3D")
c.set("UserNick","%E9%A3%8E%E6%A5%9A%E9%A2%9C")
c.set("AU","FCF")
c.set("Hm_lpvt_6bcd52f51e9b3dce32bec4a3997715ac","")
c.set("dc_tos","p65d8s")
c.set("UserName","maybe_frank")
s.cookies.update(c)
re = s.get("https://mp.csdn.net/postedit",headers = self.h)
soup = BeautifulSoup(re.content,"html.parser")
title = soup.title.string
if title == "写文章-CSDN博客":
print("登录成功!")
else:
print("登录失败")
return s
except Exception as e:
print(e) def upload(self,session,urlPath,fileName,file):
try:
f = {"file":(fileName,open(file,"rb"),"image/png")}
re = session.post(url=urlPath,headers = self.h,files = f)
return re.json()["content"]
except Exception as e:
print(e) def write(self,session,urlPath,data):
try:
body = data
re = session.post(url=urlPath,headers = self.h,data=body)
#返回上传图片后的图片url
return re.json()["content"]
except Exception as e:
print(e) if __name__ == '__main__':
sf = ApiMethod("Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0")
s = sf.loginCsdn()
sf.upload(s,"https://mp.csdn.net/UploadImage","Q1.png","C:\\Users\\ztf.YFK\\Desktop\\1.png")
data = {"titl":"wers",
"typ":1,
"cont":'<p>上传文件:</p><p><img src="https://img-blog.csdn.net/20180326110705916" alt="" /><br /></p>',
"categories":"接口",
"chnl":16,
"level":0,
"tag2":"",
"artid":0,
"private":"false",
"stat":"publish"}
content = sf.write(s,"https://mp.csdn.net/postedit/saveArticle?isPub=1",data)
print(content)

write.py的代码如下:

 from csdn.apiMethod import ApiMethod
import unittest
import time
import random
class WriteBlog(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.sf = ApiMethod("Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0")
cls.s = cls.sf.loginCsdn() @classmethod
def tearDownClass(cls):
pass def test_writeBlog(self):
file_url = self.upload(self.s,"https://mp.csdn.net/UploadImage","Q1.png","C:\\Users\\ztf.YFK\\Desktop\\1.png")
print("上传文件后的url:",end="")
print(file_url)
#发布博客时的传的body的数据
num= random.randint(1,1000)
self.data = {"titl":"wers%s"%num,
"typ":1,
"cont":'<p>上传文件:</p><p><img src="https://img-blog.csdn.net/20180326110705916" alt="" /><br /></p>',
"categories":"接口",
"chnl":16,
"level":0,
"tag2":"",
"artid":0,
"private":"false",
"stat":"publish"} #调用发布博客接口
content = self.sf.write(self.s,"https://mp.csdn.net/postedit/saveArticle?isPub=1",self.data)
print(content)
#self.assertTrue(self,content,"发布成功!")
self.assertEqual(self,content,"发布成功","调用发布博客接口请求失败!") if __name__ == '__main__':
unittest.main()

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

接口登录CSDN发布博客---封装方法,使用unittest框架的更多相关文章

  1. 【转】如何使用离线博客发布工具发布CSDN的博客文章

    目前大部分的博客作者在用Word写博客这件事情上都会遇到以下3个痛点: 1.所有博客平台关闭了文档发布接口,用户无法使用Word,Windows Live Writer等工具来发布博客.使用Word写 ...

  2. Windows Live Writer发布CSDN离线博客教程及测试

    目前大部分的博客作者在用Word写博客这件事情上都会遇到以下3个痛点: 1.所有博客平台关闭了文档发布接口,用户无法使用Word,Windows Live Writer等工具来发布博客.使用Word写 ...

  3. 【更新】用word文档来发布到csdn等博客上边免去一张张上传图片的烦恼

    目前大部分的博客作者在写博客这件事情上都会遇到以下3个痛点:1.所有博客平台关闭了文档发布接口,用户无法使用Word,Windows Live Writer等工具来发布博客.2.发布到博客或公众号平台 ...

  4. 在CSDN开通博客专栏后如何发布文章(图文)

    今天打开电脑登上CSDN发现自己授予了专栏勋章,有必要了解如何在专栏发布文章. 很感谢已经有前辈给出了图文教程,此文章转载自博客:http://blog.csdn.net/upi2u/article/ ...

  5. 为了发布博客方便,现从CSDN的naedzq整体迁移到cnblogs

    为了发布博客方便,现从CSDN的naedzq整体迁移到cnblogs

  6. 开发记录_自学Python写爬虫程序爬取csdn个人博客信息

    每天刷开csdn的博客,看到一整个页面,其实对我而言,我只想看看访问量有没有上涨而已... 于是萌生了一个想法: 想写一个爬虫程序把csdn博客上边的访问量和评论数都爬下来. 打算通过网络各种搜集资料 ...

  7. 从零开始,搭建博客系统MVC5+EF6搭建框架(4)下,前后台布局实现、发布博客以及展示。

    一.博客系统进度回顾 目前已经完成了,前台展示,以及后台发布的功能,最近都在做这个,其实我在国庆的时候就可以弄完的,但是每天自己弄,突然最后国庆2天,连电脑都不想碰,所以就一直拖着,上一篇写了前端实现 ...

  8. 【干货】利用MVC5+EF6搭建博客系统(四)(下)前后台布局实现、发布博客以及展示

    二.博客系统后台布局实现 2.1.这里所用的是MVC的布局页来实现的,后台主要分为三部分:导航.菜单.主要内容 代码实现: 这里把后台单独放在一个区域里面,所以我这里建立一个admin的区域 在布局页 ...

  9. csdn的博客上传word图片

    目前大部分的博客作者在用Word写博客这件事情上都会遇到以下3个痛点: 1.所有博客平台关闭了文档发布接口,用户无法使用Word,Windows Live Writer等工具来发布博客.使用Word写 ...

随机推荐

  1. 移动端web开发安卓和ios客户端在时间转换上的差异性问题

    作为一名移动前端开发的人员,平时遇到的兼容性问题不在少数.那么,今天就来说一下最近遇到的一个小坑(关于Android和ios在时间转换上的差异性问题)话不多说,直接上重点. 最近接到了一个需求,很简单 ...

  2. iOS - MFi 认证

    1.MFi 认证 1.1 什么是 MFi 认证 苹果 MFi 认证,是苹果公司(Apple Inc.)对其授权配件厂商生产的外置配件的一种标识使用许可,是 Apple 公司 "Made fo ...

  3. 微信小程序hidden

    首先hidden默认在display:block;情况下是会默认生效的: but在很多时候只在初始值下有效, 在data下声明 flag:true; 方法中: 无效,所以尽量不要使用hidden这个属 ...

  4. JS实现全选功能

    000. 开始 学习JS有一段时间了,最近看了一些JS练手的小demo实例,自己也尝试着用JS进行实现. 全选功能是在很多注册页面.获取用户兴趣爱好.让用户勾选一些选项等页面中常见的一种效果,主要有全 ...

  5. 对java的Thread的理解

    最好不适用线程的子线程,直接调用线程,然后用rannable接口 然后如果要公用一个参数,就是公用资源的时候,一定要在run方法的前面加上synchronized 例子 猫和狗喝同一杯水(共用资源的问 ...

  6. freemind中内容变成html转义字符解决方法

    在使用freemind的时候,没有正常关闭,导致原来的内容变成下面这样: <html> <body> <p> <b>查询所有</b> < ...

  7. 在windows10上配置Android的环境变量

    一, 首先右击"我的计算机"或"此电脑"图标,在弹出来的下拉列表中点击"属性(R)",进入到"系统"属性面板,点击左侧的 ...

  8. 使用Ant打包Web前台程序

    概述 本文通过一个简单的Web项目作为例子描述如何用ANT完成Web前台程序的打包工作.包含文件拷贝.编译.打包三部分:完成这三部就可以得到一个War了,放到Tomcat下就可以运行了. ANT的安装 ...

  9. jdk,maven,tomcat 的环境配置

    一般的下载,我想就不用我多说什么了,mysql的配置在mysql压缩包安装方式上,这里直接贴图,下次要是忘记了可以看一眼. 这两个是直接新建的,打开方式为我的电脑,右键:属性,左侧:高级系统设置,下侧 ...

  10. Win10下Ubuntu bash上手

    第一次发表博客,可能写的不是很好,希望大家谅解! 今天咱们来上手一下Windows10下的bash,首先这款bash是基于Ubuntu操作系统的一个移植,也是方便开发和学习Linux中的shell命令 ...