Hallo Demian,
ja, das habe ich gemacht:
apikey = ""
host = ""
def print_sec(val):
print (val.replace(apikey, "APIKEY").replace(host, "HOST"))
import base64
import json
import requests
def loadimage(filename):
with open(filename, "rb") as image_file:
encoded_string = base64.encodebytes(image_file.read())
return encoded_string.decode("utf-8")
url = f"{host}.webling.ch/api/1"
type = "member"
get_api_url = f"https://{url}/{type}?filter=Mitglieder ID
=\"114848\"&apikey={apikey}"
response = requests.get(get_api_url)
if response.status_code == 200:
data = response.json()
print_sec(str(data))
member_id = data["objects"][0]
else:
print_sec(f"Error: {response.status_code} {response.reason}")
{'objects': [571]}
put_api_url = f"https://{url}/{type}/{member_id}?apikey={apikey}"
data = {"properties":
{"Mitgliederbild":
{
"name": "Mitgliederbild.jpg",
"content:": loadimage("Mitgliederbild.jpg")
}
}
}
json_data = json.dumps(data)
print_sec (json_data)
{"properties": {"Mitgliederbild": {"name": "Mitgliederbild.jpg", "content:": ""}}}
print_sec (put_api_url)
response = requests.put(put_api_url, data=json_data)
print_sec (str(response.status_code))
print_sec (response.text)
print_sec (put_api_url)
https://HOST.webling.ch/api/1/member/571?apikey=APIKEY
204
https://HOST.webling.ch/api/1/member/571?apikey=APIKEY
Base64 ist nicht eindeutig definiert, es gibt verschiedene Arten das Problem zu lösen, dass Padding also das Auffüllen zu bewerkstelligen und es gibt verschieden Weg die beiden offenen Werte 62 und 63 darzustellen, denn zweimal 26 Buchstaben plus 10 Ziffern sind nur 62. Welche Art des Base64 verwendet Ihr?
Gibt es eine Maximalgröße für einen Message-Body? Base64 trägt halt sehr dick auf?
Und ich finde es etwas verwirrend, dass der Host brav eine 204 zurück schickt, obwohl der Server das Bild nicht lesen kann.
Viele Grüße
Jörn