Autor Thema: Fehler bei cURL-Simulation?  (Gelesen 4267 mal)

Offline schroederk

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.924
  • Geschlecht: Männlich
  • Ich liebe dieses Forum!
Fehler bei cURL-Simulation?
« am: 07.03.22 - 16:34:40 »
Hallo,

ich versuche folgenden cURL-Aufruf in Lotusscript umzusetzen:

Code
curl --request POST \
     --url https://api.signeasy.com/v2.1/original/ \
     --header 'Authorization: Bearer abc1234' \
     --header 'Accept: application/json' \
     --header 'Content-Type: application/json' \
     --data '
{
     "name": "test.pdf",
     "rename_if_exists": true,
     "file": "data:application/pdf;name=test.pdf;base64,XXXYYYZZZ"
}
'

So sieht mein entsprechender Lotusscript-Code aus:

Code
	' hole Datei als Base64-String
	Set stream = sess.CreateStream()
	Call stream.Open("c:\temp\" & filename)
	Set doc=New NotesDocument(db)
	Set mimeent = doc.CreateMIMEEntity
	Call mimeent.SetContentFromBytes(stream, "", ENC_IDENTITY_BINARY)
	Call mimeent.EncodeContent(ENC_BASE64)
	strEncodedFile = mimeent.ContentAsText()	

	Dim webRequest As NotesHTTPRequest
	Set webRequest = sess.createhttprequest()
	webRequest.maxredirects = 5
	webRequest.Preferstrings = True
	
	URL = "https://api.signeasy.com/v2.1/original/"
	content = "data:application/pdf;name=" & filename & ";base64," & strEncodedFile

	jsonBody = |{
		"name" : filename,
		"remame_if_exists" : True,
		"file" : content
	}|
	
	' headers
	Call webRequest.Setheaderfield("Authorization","Bearer abc1234")
	Call webRequest.SetHeaderField("ContentType","application/json")
	Call webRequest.SetHeaderField("Accept","application/json")
	
	ret = webRequest.Post(URL,jsonBody)

	Messagebox ret

Rückgabe ist folgende Meldung:
Missing required parameter name in json or the post body or the query string

Habe ich bei der Umsetzung noch etwas falsch gemacht?



Ich wäre ja gerne weniger egoistisch, aber was hab ich davon?

Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.290
  • Geschlecht: Männlich
Antw:Fehler bei cURL-Simulation?
« Antwort #1 am: 07.03.22 - 21:12:45 »
Ich denke es liegt am json, weichen ja stark voneinander ab ;)
Gruss Erik :: Freelancer :: KI-Dev, Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.16 / OLI 2.0

--
Nur ein toter Bug, ist ein guter Bug!

Offline schroederk

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.924
  • Geschlecht: Männlich
  • Ich liebe dieses Forum!
Antw:Fehler bei cURL-Simulation?
« Antwort #2 am: 08.03.22 - 07:21:15 »
Ich denke es liegt am json, weichen ja stark voneinander ab ;)

Das ist auch meine starke Vermutung, da ja auch die Fehlermeldung sagt, dass offenbar der Parameter name nicht übergeben wurde.
Ich finde leider bisher keine Beispiele, wie der Json-Code korrekt aufgebaut und übertragen werden kann.

Ich habe noch ein Beispiel gefunden, wo der json-String etwas anders aufgebaut wird, allerdings mit ebenso wenig Erfolg:

Code
	jsonBody = |{
		"name" : "|+filename+|",
		"remame_if_exists" : True,
		"file" : "|+content+|"
	}|

Hier gibts eine Anleitung für den Aufruf der API in verschiedenen Sprachen: https://docs.signeasy.com/reference/create-an-original-document

« Letzte Änderung: 08.03.22 - 07:32:30 von schroederk »
Ich wäre ja gerne weniger egoistisch, aber was hab ich davon?

Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.290
  • Geschlecht: Männlich
Antw:Fehler bei cURL-Simulation?
« Antwort #3 am: 08.03.22 - 07:57:03 »
Der JSON-Body ist immer noch falsch, boolesche Werte werden klein geschrieben.
Gruss Erik :: Freelancer :: KI-Dev, Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.16 / OLI 2.0

--
Nur ein toter Bug, ist ein guter Bug!

Offline schroederk

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.924
  • Geschlecht: Männlich
  • Ich liebe dieses Forum!
Antw:Fehler bei cURL-Simulation?
« Antwort #4 am: 08.03.22 - 08:39:53 »
Der JSON-Body ist immer noch falsch, boolesche Werte werden klein geschrieben.

Auch das Kleinschreiben der Boolschen Werte hatte leider keinen Einfluss auf das Ergebnis. 
Ich wäre ja gerne weniger egoistisch, aber was hab ich davon?

Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.290
  • Geschlecht: Männlich
Antw:Fehler bei cURL-Simulation?
« Antwort #5 am: 08.03.22 - 08:54:13 »
Übergebe mal den JSON-String direkt, so wie bei curl Befehl also ohne diesen vorher zusammenzubauen.
Gruss Erik :: Freelancer :: KI-Dev, Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.16 / OLI 2.0

--
Nur ein toter Bug, ist ein guter Bug!

Offline schroederk

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.924
  • Geschlecht: Männlich
  • Ich liebe dieses Forum!
Antw:Fehler bei cURL-Simulation?
« Antwort #6 am: 08.03.22 - 09:12:28 »
Könnte es sein, dass es an der Länge liegt?
Wenn ich den Base64-Code der Datei direkt übergeben möchte, meckert der Designer, dass das Token zu lang sei.
Der Base64-String ist allerdings bei meinem Test nur 20K groß, zukünftige Dokumente werden sicherlich auch mal deutlich größer (Vermutlich aber immer noch im KB-Bereich)

Ein verkürzter json-String (der Base64-Code enthält damit zwangsläufig keine gültige Datei) liefert wieder dieselbe Fehlermeldung.

Code
ret = webRequest.Post(URL,"{'name' : 'test123.pdf', 'rename_if_exists' : true, 'file' : 'data:application/pdf;name=test123.pdf;base64,'AAABBBCCC'}")
Ich wäre ja gerne weniger egoistisch, aber was hab ich davon?

Offline Tode

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.885
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Antw:Fehler bei cURL-Simulation?
« Antwort #7 am: 08.03.22 - 09:19:33 »
Dein String ist falsch. Er enthält ein ' zu viel vor "AAABBBCCC"

Richtig wäre:
Code
webRequest.Post(URL,"{'name' : 'test123.pdf', 'rename_if_exists' : true, 'file' : 'data:application/pdf;name=test123.pdf;base64,AAABBBCCC'}")

Unter Umständen musst Du auch den Base64- encodierten String manuell umbrechen, weil manche Systeme die Zeilenlänge beschränken...

Gemäss diesem Superuser- Post ist der Standard- Umbruch bei Base64- Dateien noch immer 76 Zeichen (früher waren Mails auf 80 Zeichen Zeilenlänge beschränkt)
« Letzte Änderung: 08.03.22 - 09:51:15 von Tode »
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.290
  • Geschlecht: Männlich
Antw:Fehler bei cURL-Simulation?
« Antwort #8 am: 08.03.22 - 09:22:02 »
Das heißt auch der curl Befehl hat so nie funktioniert?
Gruss Erik :: Freelancer :: KI-Dev, Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.16 / OLI 2.0

--
Nur ein toter Bug, ist ein guter Bug!

Offline schroederk

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.924
  • Geschlecht: Männlich
  • Ich liebe dieses Forum!
Antw:Fehler bei cURL-Simulation?
« Antwort #9 am: 08.03.22 - 10:35:15 »
Richtig wäre:
Code
webRequest.Post(URL,"{'name' : 'test123.pdf', 'rename_if_exists' : true, 'file' : 'data:application/pdf;name=test123.pdf;base64,AAABBBCCC'}")
Auch das Korrigieren des Fehlers hatte leider keine Auswirkung auf das Resultat  :'(

Unter Umständen musst Du auch den Base64- encodierten String manuell umbrechen, weil manche Systeme die Zeilenlänge beschränken...

Auf der Webseite von Signeasy kann man sich den cURL-Befehl zusammenstellen. Dieser enthält dort auch keine Umbrüche. Aber selbst mit nur 10 Zeichen, wo ja dann kein Umbruch benötigt wird, ändert es nichts am Ergebnis.

Das heißt auch der curl Befehl hat so nie funktioniert?

Wenn ich den cURL-Befehl von der Konsole aus absetze, bekomme ich zwar auch eine Fehlermeldung, aber eine etwas andere:
"Missing required parameter file in an uploaded file"

Da stimmt dann wohl leider auch noch etwas nicht.  :-\



Ich wäre ja gerne weniger egoistisch, aber was hab ich davon?

Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.290
  • Geschlecht: Männlich
Antw:Fehler bei cURL-Simulation?
« Antwort #10 am: 08.03.22 - 11:35:06 »
Warum baust Du dir keinen funktionierenden curl-Aufruf zusammen?
Wird doch als Hilfs-Funktion auf der API-Webseite bereitgestellt.
Gruss Erik :: Freelancer :: KI-Dev, Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.16 / OLI 2.0

--
Nur ein toter Bug, ist ein guter Bug!

Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.290
  • Geschlecht: Männlich
Antw:Fehler bei cURL-Simulation?
« Antwort #11 am: 08.03.22 - 11:52:27 »
Und wenn Du das schon so gemacht hast und der Fehler immer noch besteht, dann wäre das eine Frage an die API-Entwickler.
Gruss Erik :: Freelancer :: KI-Dev, Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.16 / OLI 2.0

--
Nur ein toter Bug, ist ein guter Bug!

Offline schroederk

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.924
  • Geschlecht: Männlich
  • Ich liebe dieses Forum!
Antw:Fehler bei cURL-Simulation?
« Antwort #12 am: 08.03.22 - 13:14:54 »
Warum baust Du dir keinen funktionierenden curl-Aufruf zusammen?
Wird doch als Hilfs-Funktion auf der API-Webseite bereitgestellt.

Und genau das hatte ich ja bereits geschrieben, dass ich das gemacht habe.
Ich habe auch bereits eine Anfrage an deren Support gestellt. Die sitzen aber wohl in den USA, daher wird eine Antwort noch etwas dauern.
Allerdings ist die Fehlermeldung bei Lotusscript und bei cURL etwas unterschiedlich und ich würde daher gerne wissen, ob ich grundsätzlich die Übergabe der JSON-Daten korrekt aufgebaut habe.

Ich wäre ja gerne weniger egoistisch, aber was hab ich davon?

pantelis.botsas

  • Gast
Antw:Fehler bei cURL-Simulation?
« Antwort #13 am: 08.03.22 - 18:17:39 »
Hallo schroederk,

so auf den ersten Blick hat sich ein Tippfehler eingeschlichen:

In Deinem ersten Beispielcode steht der Parameter rename_if_exists.
Weiter unten schreibst Du aber: remame_if_exists.

Offline schroederk

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.924
  • Geschlecht: Männlich
  • Ich liebe dieses Forum!
Antw:Fehler bei cURL-Simulation?
« Antwort #14 am: 09.03.22 - 07:30:39 »
so auf den ersten Blick hat sich ein Tippfehler eingeschlichen:

In Deinem ersten Beispielcode steht der Parameter rename_if_exists.
Weiter unten schreibst Du aber: remame_if_exists.

Tatsächlich! Adlerauge  :o
Aber leider hat sich damit auch nichts verändert.
Ich habe leider auch noch keine Antwort vom SignEasy-Support.  :-\


Ich wäre ja gerne weniger egoistisch, aber was hab ich davon?

Offline schroederk

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.924
  • Geschlecht: Männlich
  • Ich liebe dieses Forum!
Antw:Fehler bei cURL-Simulation?
« Antwort #15 am: 09.03.22 - 14:50:27 »
Ich habe Antwort vom Support erhalten.
Sie schrieben, ich möge doch Postman benutzen, um den Request zu erstellen.
Damit hat der Upload auch wunderbar funktioniert, allerdings sieht der cURL-Befehl etwas anders aus:

Code
curl --location --request POST 'https://api.signeasy.com/v2.1/original/' \
--header 'Authorization: Bearer uobPRV3klcoRm81pFMzxou6VYZFRJ9' \
--form 'file=@"/C:/temp/test.pdf"' \
--form 'name="test.pdf"' \
--form 'rename_if_exists="1"'

Das käme mir sogar gelegen, da ich so das File nicht erst selber als Base64-String lesen müsste.
Aber ich weiß nicht, wie ich ich das in Lotusscript im httprequest umsetzen könnte.  :-:

Ich wäre ja gerne weniger egoistisch, aber was hab ich davon?

Offline Ralf_B

  • Aktives Mitglied
  • ***
  • Beiträge: 144
  • Geschlecht: Männlich
Antw:Fehler bei cURL-Simulation?
« Antwort #16 am: 09.03.22 - 15:25:52 »
Die Übersetzung von cURL nach NotesHTTPRequest ist nicht so einfach, da cURL teilweise komplette Funktionen ausführt und nicht anzeigt, dass diese Informationen mit übergeben werden. Bsp:Cookie handling. Das muss in anderen Sprachen extra programmiert werden.
Von Postman nach Notes nutze ich bislang den URL String von Postman und die Angaben unter "Headers" als NotesHTTPRequest.SetHeaderfield.
Die Params von Postman mache ich bislang in den URL String mit rein als &X=Y&V=V ......
So hat das bislang funktioniert (incl. Cookies).
Wenn die Gegenseite allerdings prüft ob da ein echter Browser die Anfrage stellt, kann das per Postman funktionieren aber nicht per Programm (e.g. OAuth SAML).
Meine Erfahrung.

Offline schroederk

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.924
  • Geschlecht: Männlich
  • Ich liebe dieses Forum!
Antw:Fehler bei cURL-Simulation?
« Antwort #17 am: 09.03.22 - 16:01:03 »
Von Postman nach Notes nutze ich bislang den URL String von Postman und die Angaben unter "Headers" als NotesHTTPRequest.SetHeaderfield.
Die Params von Postman mache ich bislang in den URL String mit rein als &X=Y&V=V ......

Das werde ich morgen direkt mal testen, wobei ich befürchte, dass das nicht funktioniert, da ich beim API-Aufruf ja nur ein Verzeichnis und kein Script aufrufe.
Aber die Hoffnung stirbt zuletzt.  ;)
Ich wäre ja gerne weniger egoistisch, aber was hab ich davon?

Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.290
  • Geschlecht: Männlich
Antw:Fehler bei cURL-Simulation?
« Antwort #18 am: 09.03.22 - 17:00:34 »
Am Ende entsteht eine Netzwerkkommunikation die geprüft werden kann und diese API gibt es ja nicht nur für curl-Aufrufe ;)
« Letzte Änderung: 09.03.22 - 17:13:13 von jBubbleBoy »
Gruss Erik :: Freelancer :: KI-Dev, Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.16 / OLI 2.0

--
Nur ein toter Bug, ist ein guter Bug!

Offline schroederk

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.924
  • Geschlecht: Männlich
  • Ich liebe dieses Forum!
Antw:Fehler bei cURL-Simulation?
« Antwort #19 am: 10.03.22 - 08:58:57 »
Am Ende entsteht eine Netzwerkkommunikation die geprüft werden kann und diese API gibt es ja nicht nur für curl-Aufrufe ;)
Immer schön unkonkret bleiben  ;)

Wie meinst Du denn, dass ich die Netzwerkkommunikation prüfen soll? Mit Wireshark?

Ja, die API gibt es nicht nur für curl-Aufrufe. Inwiefern mir aber für Notes Dart, Go, C, NodesJS, Python etc. weiterhelfen soll, weiß ich nicht.
Es sei denn, dass per Lotusscript z.B. Javascript- oder Java-Code (inkl. der benötigten Bibliotheken) aufgerufen werden kann.  :-:

Von Postman nach Notes nutze ich bislang den URL String von Postman und die Angaben unter "Headers" als NotesHTTPRequest.SetHeaderfield.
Die Params von Postman mache ich bislang in den URL String mit rein als &X=Y&V=V ......

Ich hab's versucht, aber entweder akzeptiert Signeasy keine Parameterübergabe per GET oder es hatte dasselbe Ergebnis. Zumindest war die Fehlermeldung identisch.
Ich wäre ja gerne weniger egoistisch, aber was hab ich davon?

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz