Je souhaite créer un objet imbriqué à transmettre à la méthode requests.post en tant que paramètre. Ceci est mon code -
http://ec2-3-6-40-236.ap-south-1.compute.amazonaws.com/civicrm/sites/all/modules/civicrm/extern/rest.php?entity=CustomField&action=create&api_key=secret&key=secret&json={"custom_group_id":"test_16Nov_Voter","label":"Relationship With Guardian","options_per_line":2,"data_type":"String","html_type":"Radio","weight":7,"option_values":["Father","Mother","Husband","Other"]}
Il imprime cette URL-
http://ec2-3-6-40-236.ap-south-1.compute.amazonaws.com/civicrm/sites/all/modules/civicrm/extern/rest.php?action=create&api_key=secret&key=secret&entity=CustomField&json=custom_group_id&json=label&json=data_type&json=html_type&json=weight&json=options_per_line&json=option_values
Il devrait idéalement imprimer cette URL-
import requests baseURL = "http://ec2-3-6-40-236.ap-south-1.compute.amazonaws.com/civicrm/sites/all/modules/civicrm/extern/rest.php?" userkey = "secret" sitekey = "secret" def create(payload): r = requests.post(baseURL, params=payload) print(r.url) def createCustomPayload(customPayload): payloadCommon = {'action': 'create', 'api_key': userkey, 'key': sitekey} payloadCommon.update(customPayload) return payloadCommon create(createCustomPayload({'entity': 'CustomField', 'json': {'custom_group_id': 'test_16Nov_Voter', 'label': 'Relationship With Guardian', 'data_type': 'String', 'html_type': 'Radio', 'weight': 7, 'options_per_line': 2, 'option_values': ["Father", "Mother", "Husband", "Other"]}}))
Veuillez aider.
3 Réponses :
Il me semble que vous voulez passer l'objet sous la touche 'json'
tant que chaîne json:
def createCustomPayload(customPayload): import json if "json" in customPayload: # convert the object into a json string and attach under the json key customPayload["json"] = json.dumps(customPayload["json"]) payloadCommon = {'action': 'create', 'api_key': userkey, 'key': sitekey} payloadCommon.update(customPayload) return payloadCommon
Pour envoyer un objet JSON en tant que paramètre de requête via une requête HTTP, vous devez d'abord le sérialiser.
Vous n'obtiendrez pas l'URL que vous attendez.
Au lieu de cela, vous obtiendrez une version codée de l'objet JSON, transmise en tant que paramètre de requête.
Voir ici pour en savoir plus sur la sérialisation json.
Il semble que vous essayez d'envoyer des données à partir de sources non autorisées et il est également possible de générer une erreur si le site Web est protégé par cloudflare..comme je vois que vous n'utilisez ni l'identifiant de session ni les cookies ... c'est pourquoi vous envoyez des données appropriées mais il est signalé par le serveur comme non autorisé request .. veuillez partager le site Web et la charge utile si vous voulez une aide appropriée ... vous pouvez également utiliser request-html au lieu d'utiliser la bibliothèque de requêtes ... Ici