2
votes

Comment passer un objet params imbriqué pour la méthode de publication de la bibliothèque de requêtes en python3?

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.


0 commentaires

3 Réponses :


3
votes

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


0 commentaires

0
votes

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.


0 commentaires

-1
votes

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


0 commentaires