From the docs Note that params output from urlencode is encoded to bytes before it is sent to urlopen as data:
data = urllib.parse.urlencode(d).encode("utf-8")
req = urllib.request.Request(url)
with urllib.request.urlopen(req,data=data) as f:
resp = f.read()
print(resp)