Неверный запрос SoftLayer API на post

#ibm-cloud-infrastructure

#ibm-cloud-infrastructure

Вопрос:

Я пытаюсь заказать диски через API, используя urllib, но в ответ получаю неверный запрос. Я не могу определить, что может быть не так. Есть идеи?

         url = "https://username:apikey@api.softlayer.com/rest/v3/SoftLayer_Product_Order/placeOrder"
        data = urllib.urlencode({
            "parameters": [{
                "virtualGuests": [{"id": idofvirtualguest}],
                "prices": [{
                    "id": 113031,
                    "categories": [{
                        "categoryCode": "guest_disk1",
                        "complexType": "SoftLayer_Product_Item_Category"
                    }],
                    "complexType": "SoftLayer_Product_Item_Price"
                },
                    {
                        "id": 112707,
                        "categories": [{
                            "categoryCode": "guest_disk2",
                            "complexType": "SoftLayer_Product_Item_Category"
                        }],
                        "complexType": "SoftLayer_Product_Item_Price"
                    }
                ],
                "properties": [
                    {"name": "NOTE_GENERAL", "value": "adding disks"},
                    {"name": "MAINTENANCE_WINDOW", "value": "now"}
                ],
                "complexType": "SoftLayer_Container_Product_Order_Virtual_Guest_Upgrade"
            }]
        })

        response = urllib.urlopen(url, data)
  

Ответ №1:

Попробуйте использовать:

json.dumps вместо urllib.urlencode

Примечание: вам необходимо импортировать json, поэтому он должен выглядеть следующим образом:

 import urllib
import json

url = "https://username:apiKey@api.softlayer.com/rest/v3/SoftLayer_Product_Order/placeOrder"
idofvirtualguest = 111122233

data = json.dumps({
    "parameters": [{
        "virtualGuests": [{"id": idofvirtualguest}],
        "prices": [{
            "id": 113031,
            "categories": [{
                "categoryCode": "guest_disk1",
                "complexType": "SoftLayer_Product_Item_Category"
            }],
            "complexType": "SoftLayer_Product_Item_Price"
        },
            {
                "id": 112707,
                "categories": [{
                    "categoryCode": "guest_disk2",
                    "complexType": "SoftLayer_Product_Item_Category"
                }],
                "complexType": "SoftLayer_Product_Item_Price"
            }
        ],
        "properties": [
            {"name": "NOTE_GENERAL", "value": "adding disks"},
            {"name": "MAINTENANCE_WINDOW", "value": "now"}
        ],
        "complexType": "SoftLayer_Container_Product_Order_Virtual_Guest_Upgrade"
    }]
})

response = urllib.urlopen(url, data)