在引号之间调用函数

时间:2018-09-05 23:16:39

标签: python function api

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

在这里,更准确地说,我想用\ 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)

1 个答案:

答案 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()}”。但是,当您尝试创建的字符串中充满了大括号,但又不充满百分号字符时,通常是“一般”之外的例外。