如何在requests.put()内自动更新网页版本?
How to automatically update webpage version within requests.put()?
我在脚本中使用 requests.put() 方法来自动更新网页。问题是自动化脚本并没有像它应该的那样完全自动化。让我向您展示导致问题的代码片段:
import requests
import json
from requests.auth import HTTPBasicAuth
from bs4 import BeautifulSoup
headers = {
'Content-Type': 'application/json',
}
# Just a string payload being extracted from previous lines of code not shown here
pass_string = str(soup).replace('\"', '\"')
data = '{"id":"525424594","type":"page", "title":"Update status","space":{"key":"CSSAI"},"body":{"storage":{"value":"' + pass_string + '","representation":"storage"}}, "version":{"number":44}}'
response = requests.put('https://confluence.ai.com/rest/api/content/525424594', headers=headers, data=data,
auth=HTTPBasicAuth('svc-Automation@ai.com', 'AIengineering1@ai'))
因此,在名为 data 的 JSON 字符串中,我们有名为“version”:{“number”:44} 的键,用于更新网页,这样我们在页面版本方面没有任何冲突。并且每次网页内容变化时都应该更新。
有两种情况会改变网页的“版本”:
- 一旦我发送 requests.put() http 请求,页面就会更新,版本必须增加 1。
- 如果有人通过转到网页 link 本身更新网页并手动更改该页面的内容,版本也会更新。
对于情况 1,我可以有一个 .txt 文件,它会记录网页的以前版本,这样每次我执行脚本时,我都可以从 .txt 文件中读取以前的版本,并且版本会自动将它递增 1在脚本中,将该版本写入 .txt 文件,并使用递增的版本执行命令。
但是对于案例 2,我不知道是否有人更改了网页本身的版本,因此很难知道要增加到该网页的当前版本。
关于如何解决这个问题有什么想法吗?
经过深思熟虑,我找到了所需的解决方案。如果有人有更好的解决方案,请post在这里。
import requests
import json
from requests.auth import HTTPBasicAuth
from bs4 import BeautifulSoup
headers = {
'Content-Type': 'application/json',
}
# Just a string payload being extracted from previous lines of code not shown here
pass_string = str(soup).replace('\"', '\"')
data = '{"id":"525424594","type":"page", "title":"Update status","space":{"key":"CSSAI"},"body":{"storage":{"value":"' + pass_string + '","representation":"storage"}}, "version":{"number":2}}'
response = requests.put('https://confluence.ai.com/rest/api/content/525424594', headers=headers, data=data,
auth=HTTPBasicAuth('svc-Automation@ai.com', 'AIengineering1@ai'))
if response.json()["statusCode"] == 409:
error_message = "Version must be incremented on update. Current version is: "
if error_message in response.json()["message"]:
current_version = response.json()["message"].split(error_message)[1]
version_num = int(current_version) + 1
data = '{"id":"525424594","type":"page", "title":"Update Status","space":{"key":"CSSAI"},"body":{"storage":{"value":"' + pass_string + '","representation":"storage"}}, "version":{"number":' + str(
version_num) + '}}'
response = requests.put('https://confluence.ai.com/rest/api/content/525424594', headers=headers, data=data,
auth=HTTPBasicAuth('svc-Automation@ai.com', 'AIengineering1@ai'))
else:
print(response.json())
sys.exit(1)
基本上,我从失败的响应中收集当前版本号并将其递增 1 以发送新请求。然而,这确实意味着我们的第一个请求将永远是一个失败的请求。
我在脚本中使用 requests.put() 方法来自动更新网页。问题是自动化脚本并没有像它应该的那样完全自动化。让我向您展示导致问题的代码片段:
import requests
import json
from requests.auth import HTTPBasicAuth
from bs4 import BeautifulSoup
headers = {
'Content-Type': 'application/json',
}
# Just a string payload being extracted from previous lines of code not shown here
pass_string = str(soup).replace('\"', '\"')
data = '{"id":"525424594","type":"page", "title":"Update status","space":{"key":"CSSAI"},"body":{"storage":{"value":"' + pass_string + '","representation":"storage"}}, "version":{"number":44}}'
response = requests.put('https://confluence.ai.com/rest/api/content/525424594', headers=headers, data=data,
auth=HTTPBasicAuth('svc-Automation@ai.com', 'AIengineering1@ai'))
因此,在名为 data 的 JSON 字符串中,我们有名为“version”:{“number”:44} 的键,用于更新网页,这样我们在页面版本方面没有任何冲突。并且每次网页内容变化时都应该更新。 有两种情况会改变网页的“版本”:
- 一旦我发送 requests.put() http 请求,页面就会更新,版本必须增加 1。
- 如果有人通过转到网页 link 本身更新网页并手动更改该页面的内容,版本也会更新。
对于情况 1,我可以有一个 .txt 文件,它会记录网页的以前版本,这样每次我执行脚本时,我都可以从 .txt 文件中读取以前的版本,并且版本会自动将它递增 1在脚本中,将该版本写入 .txt 文件,并使用递增的版本执行命令。 但是对于案例 2,我不知道是否有人更改了网页本身的版本,因此很难知道要增加到该网页的当前版本。 关于如何解决这个问题有什么想法吗?
经过深思熟虑,我找到了所需的解决方案。如果有人有更好的解决方案,请post在这里。
import requests
import json
from requests.auth import HTTPBasicAuth
from bs4 import BeautifulSoup
headers = {
'Content-Type': 'application/json',
}
# Just a string payload being extracted from previous lines of code not shown here
pass_string = str(soup).replace('\"', '\"')
data = '{"id":"525424594","type":"page", "title":"Update status","space":{"key":"CSSAI"},"body":{"storage":{"value":"' + pass_string + '","representation":"storage"}}, "version":{"number":2}}'
response = requests.put('https://confluence.ai.com/rest/api/content/525424594', headers=headers, data=data,
auth=HTTPBasicAuth('svc-Automation@ai.com', 'AIengineering1@ai'))
if response.json()["statusCode"] == 409:
error_message = "Version must be incremented on update. Current version is: "
if error_message in response.json()["message"]:
current_version = response.json()["message"].split(error_message)[1]
version_num = int(current_version) + 1
data = '{"id":"525424594","type":"page", "title":"Update Status","space":{"key":"CSSAI"},"body":{"storage":{"value":"' + pass_string + '","representation":"storage"}}, "version":{"number":' + str(
version_num) + '}}'
response = requests.put('https://confluence.ai.com/rest/api/content/525424594', headers=headers, data=data,
auth=HTTPBasicAuth('svc-Automation@ai.com', 'AIengineering1@ai'))
else:
print(response.json())
sys.exit(1)
基本上,我从失败的响应中收集当前版本号并将其递增 1 以发送新请求。然而,这确实意味着我们的第一个请求将永远是一个失败的请求。