python - 从通过 requests.get() 创建的 json 中转义反斜杠
问题描述
我正在通过requests.get() 从rest-api url 收集数据并修改该数据并通过requests.put() 将修改后的数据再次推送回链接。问题是我通过 request.put() 发送的修改后的 html 代码具有反斜杠字符,这导致状态代码为 500 的内部服务器错误。我将向您展示我使用 requests.put 收集的部分 html 代码() 命令,它有反斜杠。
<p><br /></p><table><colgroup><col /><col /><col /><col /><col /><col /></colgroup><tbody><tr><th><p>JIRA</p></th><th><p>Type</p></th><th><p>PR</p></th><th><p>Commit</p></th><th><p>Author</p></th><th><p>Date</p></th></tr><tr><td><p><a href=\"https://cejira.ai.com/browse/IAPETUSZ-5742\">IAPETUSZ-5742</a></p></td><td><p>Action-Item</p></td><td><p><a href=\"https://bitbucket.ai.com/projects/FPGCSS/repos/cssh2p2/pull-requests/9739\">9739</a></p></td><td><p>caf1229bb6a</p></td><td><p>ang</p></td><td><p>Thu, 4 Feb 2021 18:02:33 -0800</p></td></tr><tr><td><p><a href=\"https://cejira.ai.com/browse/IAPETUSZ-5991\">IAPETUSZ-5991</a></p></td><td><p>Action-Item</p></td><td><p><a href=\"https://bitbucket.ai.com/projects/FPGCSS/repos/cssh2p2/pull-requests/9971\">9971</a></p></td><td><p>db996d499cb</p></td><td><p>Mo</p></td><td><p>Fri, 19 Feb 2021 14:18:27 -0800</p></td></tr><tr><td><p><a href=\"https://cejira.ai.com/browse/IAPETUSZ-5971\">IAPETUSZ-5971</a></p></td><td><p>Action-Item</p></td><td><p><a href=\"https://bitbucket.ai.com/projects/FPGCSS/repos/cssh2p2/pull-requests/10067\">10067</a></p></td><td><p>216905485f1</p></td><td><p><br /></p></td><td><p>Fri, 26 Feb 2021 00:12:01 -0800</p></td></tr><tr><td><p><a href=\"https://cejira.ai.com/browse/IAPETUSZ-6200\">IAPETUSZ-6200</a></p></td><td><p>Action-Item</p></td><td><p><a href=\"https://bitbucket.ai.com/projects/FPGCSS/repos/cssh2p2/pull-requests/10126\">10126</a></p></td><td><p>ca28f68a0a5</p></td><td><p>Chowdhury</p></td><td><p>Tue, 9 Mar 2021 16:37:18 -0800</p></td></tr><tr><td><p><a href=\"https://cejira.ai.com/browse/IAPETUSZ-5608\">IAPETUSZ-5608</a></p></td><td><p>Action-Item</p></td><td><p><a href=\"https://bitbucket.ai.com/projects/FPGCSS/repos/cssh2p2/pull-requests/9510\">9510</a></p></td><td><p>b316a1c21be</p></td><td><p>Chowdhury</p></td><td><p><br /></p></td></tr><tr><td><p><a href=\"https://cejira.sandisk.com/browse/IAPETUSZ-5075\">IAPETUSZ-5075</a></p></td><td><p>Action-Item</p></td><td><p><a href=\"https://bitbucket.ai.com/projects/FPGCSS/repos/cssh2p2/pull-requests/8971\">8971</a></p></td><td><p>69fc6076c4f</p></td><td><p>ti</p></td><td><p>Fri, 11 Dec 2020 12:03:21 -0800</p></td></tr><tr><td><p><a href=\"https://cejira.ai.com/browse/IAPETUSZ-5757\">IAPETUSZ-5757</a></p></td><td><p>Bug</p></td><td><p><a href=\"https://bitbucket.ai.com/projects/FPGCSS/repos/cssh2p2/pull-requests/9666\">9666</a></p></td><td><p>dfe303b4260</p></td><td><p>rg</p></td><td><p>Fri, 29 Jan 2021 09:54:31 -0800</p></td></tr></tbody></table><p class=\"auto-cursor-target\"><br /></p><p><br /></p>
正如您从上面看到的,html 代码具有 <a href="https://bitbucket.ai.com/projects/CSSai/repos/cssh2p2/pull-requests/9739" 具有反斜杠并导致问题。反斜杠不会在此处打印,因此您看不到它,但上面有代码块。下面是我的代码:
import requests
from requests.auth import HTTPBasicAuth
from bs4 import BeautifulSoup
response = requests.get('https://confluence.ai.com/rest/api/content/525424594?expand=body.storage',
auth=HTTPBasicAuth('svc-Automation@ai.com', 'AIengineering1@wdc')).json()
soup = BeautifulSoup(response['body']['storage']['value'], 'html.parser')
html = soup.contents
for idx in range(0, len(html)):
new_tag = soup.new_tag("a", href="https://bitbucket.ai.com/projects//pull-requests/")
if idx == 2:
print("Contents of TABLE %%%%%%%%%%%%%%%%%%")
print(html[idx])
print('\n')
# [br.extract() for br in html[idx].find_all('br')]
for br in html[idx].find_all('br'):
br.extract()
html.insert(idx, new_tag)
html[idx].string = "MY_Link"
pass_string = str(soup)
headers = {
'Content-Type': 'application/json',
}
data = '{"id":"525424594","type":"page", "title":"Feature Automation - POST data","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@wdc'))
print(response.json())
我认为 JSON 数据不喜欢 ",因此 reuquests.put() 显示状态代码 500。
解决方案
推荐阅读
- angular - 如何使用 Angular Material 构建 Ivy?
- python - 如何在 Excel 工作簿中循环工作表
- vb.net - VB中如何改变某些文本的位置
- python - 如何将图例自定义为直线而不是矩形
- c - 如何检查我的单循环单变量排序代码是否有效?
- java - 关于Java8中函数式接口的问题
- javascript - jQuery DataTables:如何在单击行按钮时抑制行详细信息模式?
- c - 似乎永远无法在 c 中的链表中获得打印功能
- javascript - 克隆后如何清除输入、选择和文本区域字段
- php - 剥离父类别但在 Wordpress 中保留子类别永久链接