如何在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} 的键,用于更新网页,这样我们在页面版本方面没有任何冲突。并且每次网页内容变化时都应该更新。 有两种情况会改变网页的“版本”:

  1. 一旦我发送 requests.put() http 请求,页面就会更新,版本必须增加 1。
  2. 如果有人通过转到网页 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 以发送新请求。然而,这确实意味着我们的第一个请求将永远是一个失败的请求。