在引号之间调用函数



我是编程初学者,目前正在尝试在引号之间调用函数。

在这里,更准确地说,我想将"名称"中的名称替换为 88。我怎么能用所有这些引号做到这一点?

提前感谢您的帮助

import requests
url = "https://api.multiloginapp.com/v1/profile/create"
def descr():
return 88
querystring = {"token":"xxxx"}
payload = "{nt"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": truen    },n    "geolocation": {n        "permitType": "block"n    },n    "mediaDevices": {n        "audioInputs": 1,n        "audioOutputs": 1,n        "videoInputs": 1n    },n    "webgl": {n        "noise": truen    },n    "webRtc": {n        "type": "block"n    },n    "shared": falsent},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)

执行您在此处直接询问如何执行的操作的方法是使用字符串格式。例如,使用 printf 样式的格式,1而不是这个:

payload = " … "name": "name" … "

。这样做:

template = " … "name": "%s" … "
payload = template % (descr(),)

当我们这样做时,如果您将有效负载放在单引号中,则无需转义每个"。更好的是,如果你把它放在三引号中,你就不需要转义所有的换行符。有关详细信息,请参阅有关字符串的教程部分:

template = """{
t"generateZeroFingerprintsData": true,
t"name": "%s",
# …
}"""

但是,通过不做任何这些,您可以使事情变得容易得多。您正在尝试构建表示字典的 JSON 文本。最简单的方法是创建字典并对其进行 JSON 化:

payloadobj = {
"generateZeroFingerprintsData": True,
"name": descr(),
# …
}
payload = json.dumps(payloadobj)

或者,更好的是,让requests为您做。不要用字符串传递data=,而是用字典json=传递它,它会自动对其进行 JSON 化,并为您设置Content-Type标头:

payload = {
"generateZeroFingerprintsData": True,
"name": name,
# …
}
# …
response = requests.post(url, json=payload, headers=headers, params=querystring)

(另请注意,我没有调用泛型request函数并传递POST,你实际上只想对requests不知道的自定义 HTTP 谓词执行,而是使用了更简单的post函数,如快速入门文档中所示。


1.通常,较新的基于大括号的格式更简单。特别是在 3.6+ 中,您可以在引号内调用函数,只需将其括在 f 字符串内的大括号中,例如"spam = f'egg = {eggs((}"。但是,当您尝试创建的字符串充满了文字大括号,但没有充满文字百分比字符时,这通常是"一般"的例外。

最新更新