Verwenden von JSON in einer „GET“-HTTP-AnfrageIch arbeite an einer Schnittstelle mit unserer Datenabruf-Engine.Ich kann einen Job ganz gut mit einer POST-Anfrage wie dieser senden:
Anfrage = Neue HTTP-Anfrage (
url( "http://fc8tdbitmapconvs07:11111/daas/" ),
Methode( "POST" ),
Json ( Textdatei laden ( ctfn ) )
);
Daten = Anfrage << Senden;
'data' enthält die Antwort vom Server und alles ist gut.
-------------------------------------------
Wenn ich jedoch versuche, den Status des laufenden Jobs mit einer 'GET'-Anforderung zu überprüfen, wird der JSON nicht in die HTTP-Anforderung an den Server aufgenommen:
Versuch Nr. 1:
request2 = Neue HTTP-Anfrage (
url( "http://fc8tdbitmapconvs07:11111/daas/status/" ),
Methode( "GET" ),
headers( {"Content-Type:application/json"} ), // fügen Sie Ihre benutzerdefinierten Header hinzu
Json ( Textdatei laden ( ctfn2 ) )
);
Daten2 = Anfrage2 << Senden;
Versuch Nr. 2
request2 = Neue HTTP-Anfrage (
url( "http://fc8tdbitmapconvs07:11111/daas/status/" ),
Methode( "GET" ),
headers( {"Content-Type:application/json"} ) // Fügen Sie Ihre benutzerdefinierten Header hinzu
);
request2 < Daten2 = Anfrage2 << Senden;
In beiden Fällen kann JSON nicht geladen werden.Die Header-Informationen gelangen problemlos zum Server, aber die Stelle, an der der JSON in der Anfrage stehen sollte, ist leer.Was vermisse ich?
Danke
Betreff: Verwendung von JSON in einer "GET"-HTTP-AnforderungDiese Funktion (mit „GET“ beim Senden von JSON) sollte in JMP 15 verfügbar sein.
Betreff: Verwendung von JSON in einer "GET"-HTTP-AnforderungEine letzte Sache (oder 2).kann die Auftragsnummer usw. als Abfragezeichenfolgenparameter übergeben werden (oder sogar JSON kann in den Anforderungsheader eingebettet werden)
und 2, stellen Sie sicher, dass Sie das Get mit einem "Körper" zur Wunschliste hinzufügen.Auf diese Weise können wir den Überblick behalten und Sie können benachrichtigt werden, wenn es da ist.
Danke.
-Bryan
Betreff: Verwendung von JSON in einer "GET"-HTTP-AnforderungBryon,
Danke für die schnelle Antwort.Ich arbeite direkt mit dem Entwickler für die REST-API zusammen, und das Verpacken des JSON in eine GET-Anforderung ist ihre dokumentierte Art, Daten anzufordern.Sie haben Recht, dass die Spezifikation nicht klar ist und das Verpacken von JSON in einer GET-Anforderung in einigen CS-Lehrplänen gelehrt wird.In diesem Fall besteht die Idee darin, eine Jobnummer zu übergeben, die entweder einen Code zurückgibt, der anzeigt, dass der Job noch nicht abgeschlossen ist (Poll & Response), oder einen Code, der anzeigt, dass er abgeschlossen ist, die Datendateinamen und eine ZIP-Datei, die diese Dateien enthält .Wenn Sie etwas in JMP 15 bekommen könnten, wäre das sehr hilfreich.
Betreff: Verwendung von JSON in einer "GET"-HTTP-AnforderungNachdem ich die HTTP-Spezifikation gelesen habe, sehe ich, dass das Senden von Daten mit einem GET abgeraten wird und dass Server es normalerweise ignorieren.
Ich habe diese Diskussion auf Stackoverflow gefunden, die auf die relevanten HTTP-Spezifikationen verweist.
Ist diese Aussage richtig? Die HTTP-GET-Methode hat immer keinen Nachrichtentext
Es kocht im Grunde, wenn einige benutzerdefinierte Webservice-Implementierungen es verwenden könnten, und die Spezifikation ist ziemlich nebulös.
Vielleicht kann ich etwas für JMP 15 reinbekommen, wenn der Bedarf noch besteht.
Gibt es andere Möglichkeiten, mit diesem Dienst zu interagieren?
Betreff: Verwendung von JSON in einer "GET"-HTTP-AnforderungIst der JSON in einen Anforderungsheader eingebettet? (Dropbox, Onedrive und viele andere machen das)
Das JSON-Argument in der HTTP-Anforderung, das in einem POST/PATCH/PUT verwendet wird, wobei der Inhalt mit dem JSON-Inhaltstyp gesendet wird.Es ist eine "Submit"-Aktion.
GET werden "gelesen" und Argumente sind entweder Abfragezeichenfolgen oder in einen Anforderungsheader eingebettet.
Betreff: Verwendung von JSON in einer "GET"-HTTP-AnforderungBryan_boone,
Danke, für die schnelle Antwort. Laut dem Entwickler, der die
REST API ist JSON erforderlich. Hier ist die funktionierende Version in Python
status_info = erhalten (
'http://fc8tdbitmapconvs07:11111/daas/status/',
json={'_id': '5cc311a97925b1000ce4fd54', 'include_complete':
WAHR}
).json()
>> die lange Zahl in Rot ist die Auftragsnummer, die natürlich variiert. Das
bit funktioniert gut in einem Python-Notebook oder in JMP mit dem
nach JSL. Aber wie bringe ich es dazu, mit dem HTTP-Request-Protokoll zu arbeiten?
Danke!
-------------------------------------------------- -------------------------------------------------- -------------------------
Python-Init();
Python ausführen (
{X},
{status_info},
"
getpass importieren
aus io importiere BytesIO
ab zeit import schlaf
pandas als pd importieren
aus Anfragen importieren, abrufen, posten
status_info = erhalten (
'http://fc8tdbitmapconvs07:11111/daas/status/',
json={'_id': '5cc311a97925b1000ce4fd54', 'include_complete':
WAHR}
).json()
"
);
Python-Term();
Betreff: Verwendung von JSON in einer "GET"-HTTP-Anforderung"ERHALTEN"
und "POSTEN"
sind zwei verschiedene HTTP-Request-Methoden ( https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods )
"GET" liest typischerweise Daten von einem Server während
"Post" übermittelt typischerweise Daten an einen Server.
Dies sind außerhalb von JMP/JSL definierte Webserver/Webdienste
In Ihrem ersten Beispiel senden Sie Daten an „http://fc8tdbitmapconvs07:11111/daas/“ und teilen dies dem Dienst mit ctfn ist der zu verwendende JSON-Inhalt.
In Versuch Nr. 1 besteht das Ziel darin, den Status eines laufenden Jobs zu "GET" zu ermitteln. Ich bin mir nicht sicher, was der Dienst ist, aber wenn der Endpunkt "http://fc8tdbitmapconvs07:11111/daas/status/" ist, dann möchten Sie so etwas wie:
request2 = New HTTP Request(
url( "http://fc8tdbitmapconvs07:11111/daas/status/" ),
Method( "GET" )
);
data2 = request2 << Send;
Da Sie in einem GET nichts an den Server senden würden.
Zusätzlich wird "Content-Type:application/json" verwendet, um den Inhalt zu beschreiben, den Sie senden (nicht wirklich geeignet in einem GET, da Sie Daten empfangen und wahrscheinlich vom Webserver ignoriert werden).
Inhaltstyp: Header sind das, was Sie senden (diese werden automatisch von HTTP Request gesetzt)
Akzeptieren: Header sind das, was Sie dem Webserver mitteilen möchten.
request << Get MIME Type
wird Ihnen sagen, was der Webserver gesendet hat. (Die meisten Webserver setzen dies, aber es kann leer sein)
Denken Sie auch daran, dass nach jeder
request << Send
Du kannst tun
request << Get Status; //this is the http status code
request << Get Status Message; //this is the message from the server
um jede Fehlermeldung zu untersuchen, die der Webdienst ausgibt.
HTH