Requests方法 -- 参数关联

Posted teachertao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Requests方法 -- 参数关联相关的知识,希望对你有一定的参考价值。

一、删除草稿箱
1、参数这篇https://www.cnblogs.com/Teachertao/p/11144726.html

技术图片

2、删除刚才保存的草稿

技术图片

3、用 fiddler 抓包,抓到删除帖子的请求,从抓包结果可以看出,传的 json 参数是 postId

技术图片

4、这个 postId 哪里来的呢?可以看上个请求 url 地址

技术图片

5、也就是说保存草稿箱成功之后,重定向一个 url 地址,里面带有 postId 这个参数。那接下来我们提取出来就可以了

二、提取参数
1.我们需要的参数 postId 是在保存成功后 url 地址,这时候从 url 地址提出对应的参数值就行了,先获取保存成功后 url
2.通过正则提取需要的字符串,这个参数值前面(postid=)和后面(&)字符串都是固定的
3.这里正则提出来的是 list 类型,取第一个值就可以是字符串了(注意:每次保存需要修改内容,不能重复)

 技术图片

 

三、传参
1.删除草稿箱的 json 参数传上面取到的参数:"postId": postid[0]
2.json 数据类型 post 里面填 json 就行,会自动转 json
3.接着前面的保存草稿箱操作,就可以删除成功了

技术图片

 

四、参照代码
import requests
#禁用安全请求警告
from requests.packages.urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
"""
1.由于登录时候是多加 2 个 cookie,我们可以先用 get 方法打开登录首页,获取部分 cookie
2.再把登录需要的 cookie 添加到 session 里
3.添加成功后,随便编辑正文和标题保存到草稿箱
"""

# 先打开登录首页,获取部分 cookie
url = "https://account.cnblogs.com/signin?returnurl=https%3A%2F%2Fwww.cnblogs.com%2F"

header =
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36"

s = requests.Session()
r = s.get(url,headers=header)
print(r.cookies)

# 添加登录需要的两个 cookie
c = requests.cookies.RequestsCookieJar()
c.set(".Cnblogs.AspNetCore.Cookies","自己抓取的cookie")
c.set(".CNBlogsCookie","自己抓取的cookie")
# c.set(‘AlwaysCreateItemsAsActive‘,"True")
# c.set(‘AdminCookieAlwaysExpandAdvanced‘,"True")
s.cookies.update(c)
print(s.cookies)

# 登录成功后保存编辑内容
r1 = s.get("https://i.cnblogs.com/EditPosts.aspx?opt=1", headers=header,verify=False)
print(r1.text)

# 保存草稿箱
url2 = "https://i.cnblogs.com/EditPosts.aspx?opt=1"
body =
"__VIEWSTATE":"",
"__VIEWSTATEGENERATOR":"FE27D343",
"Editor$Edit$txbTitle":"Hi,扭扭",
"Editor$Edit$EditorBody":"<p>你们好吗 ?</p><p>Are you ok ?</p>",
"Editor$Edit$Advanced$ckbPublished":"on",
"Editor$Edit$Advanced$chkDisplayHomePage":"on",
"Editor$Edit$Advanced$chkComments":"on",
"Editor$Edit$Advanced$chkMainSyndication":"on",
"Editor$Edit$Advanced$txbEntryName":"",
"Editor$Edit$Advanced$txbExcerpt":"",
"Editor$Edit$Advanced$txbTag":"",
"Editor$Edit$Advanced$tbEnryPassword":"",
"Editor$Edit$lkbDraft":"存为草稿",

r2 = s.post(url2,data=body,verify=False)
# print(r.content.decode("utf-8"))
#获取当前的url地址
save_url = r2.url
print(save_url)

#正则获取需要的postid参数
import re
postid = re.findall(r"postid=(.*?)&",r2.url)
print(postid) #正则提取的值是list

#提取为字符串
print(postid[0])

#删除草稿箱
url3 = "https://i.cnblogs.com/post/delete"
form_json = "postId":postid[0]
result = s.post(url3,json=form_json,verify=False)
print(result.json())

 

以上是关于Requests方法 -- 参数关联的主要内容,如果未能解决你的问题,请参考以下文章

python+requests接口自动化3. 接口<参数>的关联与cookie提取

详解--Postman基本使用方法+接口关联+[Python+requests]代码接口关联,值得你收藏

爬虫requests库的方法与参数

Requests方法 -- 关联用例执行

requests不带参数的get请求和带get参数请求

Python瞎老弟的爬虫心得之requests篇②requests基本使用