Uso de JSON en una solicitud HTTP "GET"Estoy trabajando para interactuar con nuestro motor de recuperación de datos.Puedo enviar un trabajo perfectamente bien usando una solicitud POST como esta:
solicitud = nueva solicitud HTTP (
URL( "http://fc8tdbitmapconvs07:11111/daas/" ),
Método ("POST"),
Json (Cargar archivo de texto (ctfn))
);
datos = solicitud << Enviar;
'datos' contiene la respuesta del servidor y todo está bien.
-------------------------------------------
Sin embargo, cuando trato de verificar el estado del trabajo en ejecución con una solicitud 'GET', el json no se incluye en la solicitud HTTP al servidor:
Intento #1:
request2 = Nueva solicitud HTTP (
URL( "http://fc8tdbitmapconvs07:11111/daas/status/" ),
Método( "OBTENER"),
headers( {"Content-Type:application/json"} ), // agregue sus encabezados personalizados
Json (Cargar archivo de texto (ctfn2))
);
datos2 = solicitud2 << Enviar;
Intento #2
request2 = Nueva solicitud HTTP (
URL( "http://fc8tdbitmapconvs07:11111/daas/status/" ),
Método( "OBTENER"),
headers( {"Content-Type:application/json"} ) // agrega tus encabezados personalizados
);
request2 < datos2 = solicitud2 << Enviar;
En ambos casos, el JSON no se carga.La información del encabezado llega bien al servidor, pero el lugar donde debería estar el JSON en la solicitud está vacío.¿Qué me estoy perdiendo?
Gracias
Re: Uso de JSON en una solicitud HTTP "GET"Esta función (usar "GET" al enviar JSON) debería estar disponible en JMP 15.
Re: Uso de JSON en una solicitud HTTP "GET"Una última cosa (o 2).¿Se puede pasar el número de trabajo, etc. como un parámetro de cadena de consulta (o incluso se puede incrustar JSON en el encabezado de la solicitud)
y 2, asegúrese de agregar el get con un "cuerpo" a la lista de deseos.De esa manera podemos realizar un seguimiento y se le puede notificar cuando esté allí.
Gracias.
-Bryan
Re: Uso de JSON en una solicitud HTTP "GET"Bryan,
Gracias por la rápida respuesta.Estoy trabajando directamente con el desarrollador de la API REST y empaquetar el JSON en una solicitud GET es su forma documentada de solicitar datos.Tiene razón en que la especificación no es clara y empaquetar JSON en una solicitud GET es lo que se enseña en algunos planes de estudio de CS.En este caso, la idea es pasar un número de trabajo que devolverá un código que indica que el trabajo aún no está completo (encuesta y respuesta) o un código que indica que está completo, los nombres de los archivos de datos y un archivo zip que contiene estos archivos. .Si pudiera obtener algo en JMP 15, sería muy útil.
Re: Uso de JSON en una solicitud HTTP "GET"Después de leer sobre las especificaciones de HTTP, veo que se desaconseja enviar datos con un GET y que los servidores generalmente lo ignoran.
Encontré esta discusión sobre stackoverflow, que enlaza con las especificaciones HTTP relevantes.
¿Es correcta esta afirmación? El método HTTP GET siempre no tiene cuerpo de mensaje
Básicamente, se debe a que algunas implementaciones de servicios web personalizados podrían usarlo y la especificación es bastante nebulosa al respecto.
Tal vez pueda obtener algo para JMP 15 si aún existe la necesidad.
¿Existen otras vías para interactuar con este servicio?
Re: Uso de JSON en una solicitud HTTP "GET"¿El JSON está incrustado en un encabezado de solicitud? (Dropbox, Onedrive y muchos otros hacen eso)
El argumento JSON en la solicitud HTTP utilizada en un POST/PATCH/PUT donde el contenido se envía con el tipo de contenido JSON.Es una acción de "enviar".
GET son "leídos" y los argumentos son cadenas de consulta o están incrustados en un encabezado de solicitud.
Re: Uso de JSON en una solicitud HTTP "GET"bryan_boone,
Gracias por la rápida respuesta. Según el desarrollador que escribió el
API REST, se requiere JSON. Aquí está la versión de trabajo en Python
estado_info = obtener (
'http://fc8tdbitmapconvs07:11111/daas/status/',
json={'_id': '5cc311a97925b1000ce4fd54', 'incluir_completo':
Verdadero}
).json()
>> el número largo en rojo es el número de trabajo que, por supuesto, varía. Este
bit funciona bien ejecutándose en un cuaderno de python o ejecutándose dentro de JMP usando el
siguiendo JSL. Pero, ¿cómo hago para que funcione con el protocolo de solicitud HTTP?
¡Gracias!
-------------------------------------------------- -------------------------------------------------- -------------------------
Inicialización de Python();
Ejecutar Python (
{X},
{status_info},
"
importar pase de acceso
desde io importar BytesIO
desde el tiempo de importación del sueño
importar pandas como pd
de solicitudes importar obtener, publicar
estado_info = obtener (
'http://fc8tdbitmapconvs07:11111/daas/status/',
json={'_id': '5cc311a97925b1000ce4fd54', 'incluir_completo':
Verdadero}
).json()
"
);
Término de Python ();
Re: Uso de JSON en una solicitud HTTP "GET""CONSEGUIR"
y "POST"
son dos métodos de solicitud HTTP diferentes ( https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods )
"GET" normalmente lee datos de un servidor mientras
"Publicar" normalmente envía datos a un servidor.
Estos son servidores web/servicios web definidos fuera de JMP/JSL
En su primer ejemplo, está "PUBLICANDO" (también conocido como enviando) datos a "http://fc8tdbitmapconvs07:11111/daas/" y diciéndole al servicio que ctfn es el contenido JSON a usar.
En el intento n.º 1, el objetivo es "OBTENER" el estado de un trabajo en ejecución. No estoy seguro de cuál es el servicio, pero si el punto final es "http://fc8tdbitmapconvs07:11111/daas/status/", querrá algo como:
request2 = New HTTP Request(
url( "http://fc8tdbitmapconvs07:11111/daas/status/" ),
Method( "GET" )
);
data2 = request2 << Send;
Dado que no enviaría nada al servidor en un GET.
Además, "Content-Type:application/json" se usa para describir el contenido que está enviando (no es realmente apropiado en un GET ya que está recibiendo datos y probablemente el servidor web lo ignore)
Tipo de contenido: los encabezados son lo que está enviando (estos se configuran automáticamente mediante la solicitud HTTP)
Aceptar: los encabezados son lo que le dices al servidor web que te gustaría.
request << Get MIME Type
le dirá lo que envió el servidor web. (la mayoría de los servidores web configuran esto, pero puede estar vacío)
Tenga en cuenta, también, que después de cualquier
request << Send
Tu puedes hacer
request << Get Status; //this is the http status code
request << Get Status Message; //this is the message from the server
para investigar cualquier mensaje de error que emita el servicio web.
HTH