我是编程的初学者,目前正在尝试在引号之间调用函数。
在这里,更准确地说,我想用\ 88替换\“ name \”:\“ name \”中的名称。我怎么能用所有这些引号呢?
预先感谢您的帮助
import requests
url = "https://api.multiloginapp.com/v1/profile/create"
def descr():
return 88
querystring = {"token":"xxxx"}
payload = "{\n\t\"generateZeroFingerprintsData\": true,\n \"name\": \"name\",\n \"OS\": \"MacOS\",\n \"platform\": \"MacIntel\",\n \"browserType\": \"mimic\",\n \"proxyHost\": \"0.0.0.0\",\n \"proxyPort\": 0,\n \"proxyIpValidation\": false,\n \"proxyType\": \"socks5\",\n \"maskFonts\": true,\n \"disablePlugins\": true,\n \"disableWebrtcPlugin\": true,\n \"disableFlashPlugin\": true,\n \"canvasDefType\": \"noise\",\n \"hardwareConcurrency\": 2,\n \"langHdr\": \"en-US,en;q=0.8\",\n \"timeZone\": \"US/Eastern\",\n \"audio\": {\n \"noise\": true\n },\n \"geolocation\": {\n \"permitType\": \"block\"\n },\n \"mediaDevices\": {\n \"audioInputs\": 1,\n \"audioOutputs\": 1,\n \"videoInputs\": 1\n },\n \"webgl\": {\n \"noise\": true\n },\n \"webRtc\": {\n \"type\": \"block\"\n },\n \"shared\": false\n\t},\n}"
headers = {
'Content-Type': "application/json",
'Cache-Control': "no-cache",
'Postman-Token': "xxx
}
response = requests.request("POST", url, data=payload, headers=headers, params=querystring)
print(response.text)
答案 0 :(得分:1)
直接在这里询问如何执行操作的方法是使用字符串格式。例如,using printf-style formatting, 1 代替:
payload = " … \"name\": \"name\" … "
…执行此操作:
template = " … \"name\": \"%s\" … "
payload = template % (descr(),)
我们正在这样做,如果您将有效载荷放在单引号中,则不需要转义每个"
。更好的是,如果将其用三引号引起来,则无需转义所有换行符。有关详情,请参见the tutorial section on Strings:
template = """{
\t"generateZeroFingerprintsData": true,
\t"name": "%s",
# …
}"""
但是,您可以通过不执行任何操作来简化整个过程。您正在尝试构建表示字典的JSON文本。最简单的方法是just create the dictionary and JSON-ify it:
payloadobj = {
"generateZeroFingerprintsData": True,
"name": descr(),
# …
}
payload = json.dumps(payloadobj)
或者,更好的是,让requests
为您完成。 Instead of passing data=
with a string, pass it json=
with a dict, and it automatically JSON-ifies it, and also sets the Content-Type
header for you:
payload = {
"generateZeroFingerprintsData": True,
"name": name,
# …
}
# …
response = requests.post(url, json=payload, headers=headers, params=querystring)
(此外,请注意,我使用的是更简单的{{1},而不是调用通用的request
函数并传递POST
(实际上只想对custom HTTP verbs that requests
doesn't know about进行传递) }函数as shown in the quickstart docs。)
1。通常,较新的基于大括号的格式更简单。特别是在3.6+版本中,您可以在引号内直接调用函数,只需将其包装在f字符串内的花括号中即可,例如“ spam = f'eggs = {eggs()}”。但是,当您尝试创建的字符串中充满了大括号,但又不充满百分号字符时,通常是“一般”之外的例外。