Home > Software design >  How can I pass a dict a query param for a POST request in Python?
How can I pass a dict a query param for a POST request in Python?

Time:09-17

I am trying to make a POST request with a param which is a dict.

Is it possible or do I have to convert it to something else?

import requests

def do_random_request(self, random_dictionary: dict, random_number: int, random_name: str):
  url = "https://api.random-site.com/"
  params = {
    "randomObject": random_dictionary,
    "randomNumber": random_number,
    "randomName": random_name,
  }

  try:
    response = requests.post(url, params)
    data = response.json()
  except Exception as e:
    print(e)
  else:
   return data

Right now I'm getting the following error from the API endpoint:

{'error': '"randomObject" must be of type object'}

CodePudding user response:

Requests are better if sent in json.

This should work

import json
import requests
 
def do_random_request(self, random_dictionary: dict, random_number: int, random_name: str):
  random_dictionary_json = json.dumps(dict, indent = 4)
  url = "https://api.random-site.com/"
  params = {
    "randomObject": random_dictionary_json,
    "randomNumber": random_number,
    "randomName": random_name,
  }

  try:
    response = requests.post(url, params)
    data = response.json()
  except Exception as e:
    print(e)
  else:
   return data

Hope this works, if it doesn't please comment

CodePudding user response:

I finally realized that I needed to pass it as json instead of param:

def do_random_request(self, random_dictionary: dict, random_number: int, random_name: str):
  url = "https://api.random-site.com/"
  json = {
    "randomObject": random_dictionary,
    "randomNumber": random_number,
    "randomName": random_name,
  }
  • Related