2010-02-21 17 views
54

Estoy tratando de desarrollar un gadget de barra lateral que automatice el proceso de verificar una página web para la evolución de mi cuota de transferencia. Estoy casi en ello, pero hay un último paso que necesito para que funcione: Enviar una HttpRequest con los datos POST correctos a una página php. El uso de un plugin de Firefox, aquí es lo que el "Content-Type" de la cabecera se ve así:¿Cuál es el parámetro de límite en una solicitud HTTP de varias partes (POST)?

Content-Type=multipart/form-data; boundary=---------------------------99614912995 

con el parámetro "límite" que parece ser al azar, y la POSTDATA es la siguiente:

POSTDATA =-----------------------------99614912995 
Content-Disposition: form-data; name="SOMENAME" 

Formulaire de Quota 
-----------------------------99614912995 
Content-Disposition: form-data; name="OTHERNAME" 

SOMEDATA 
-----------------------------99614912995-- 

No entiendo cómo emular correctamente el POSTDATA con el parámetro misterioso "límite" que vuelve.

¿Alguien sabría cómo puedo solucionar esto?

+0

¿Encontró una solución para esto? ¿Cómo enviar campos como SOMENAME, OTHERNAME usando curl? –

+0

Mis experiencias con problema similar aparece en la lista [aquí] [1] [1]: http://stackoverflow.com/questions/31774695/using-multipart-without-form-in-spring-mvc –

Respuesta

35

El parámetro de límite se establece en un número de guiones más una cadena al azar al final, pero puede establecerlo en cualquier cosa. El problema es que si la cadena de límite aparece en los datos de solicitud, se tratará como un límite.

Para algunos consejos, y una función de ejemplo para enviar datos multipart/form ver mi respuesta al this question. No sería demasiado difícil modificar esa función para usar un bucle para cada parte que le gustaría enviar.

+0

¡Gracias! ¡Esto me ayudó a acercarme a mi objetivo! No funciona todavía, pero esto aclara ;-) –

+3

Nota: Content-Length debe cambiarse cuando el límite cambie – K3rnel31

+0

Esto me ayudó mucho :) – wayzz

4

La especificación real para multipart/form-data está en RFC 7578. El límite se define en Section 4.1.

69

citar el RFC 1341, section 7.2.1, lo que considero que son los bits correspondientes en el parámetro de la cabecera boundaryContent-Type (MIME):

Todos los subtipos de "varias partes" comparten una sintaxis común ...

El campo Tipo de contenido para entidades multiparte requiere un parámetro, "límite", que se usa para especificar el límite de encapsulación. El límite de encapsulación se define como una línea que consiste completamente de dos caracteres de guión ("-", código decimal 45) seguido del valor del parámetro de límite del campo de encabezado de tipo de contenido.

y luego aclara:

Por lo tanto, un campo de cabecera Content-Type de varias partes típico podría tener este aspecto:

Content-Type: multipart/mixed; boundary=gc0p4Jq0M2Yt08jU534c0p 

Esto indica que la entidad se compone de varias partes, cada una con una estructura que es sintácticamente idéntica a un mensaje RFC 822, excepto que el área del encabezado puede estar completamente vacía, y que el pa RTS están precedidos cada uno por la línea --gc0p4Jq0M2Yt08jU534c0p

A tener en cuenta:

límite
  1. La encapsulación debe ocurrir al comienzo de una línea, es decir,, siguiendo un CRLF (Carriage Return-Line Feed)
  2. El límite debe seguirse inmediatamente por otro CRLF y los campos de encabezado para la siguiente parte, o por dos CRLF, en cuyo caso no hay campos de encabezado para la siguiente parte (y, por lo tanto, se supone que es de tipo Content-text/plain).
  3. Los límites de encapsulación no deben aparecer dentro de las encapsulaciones, y no deben tener más de 70 caracteres, sin contar los dos guiones principales.

Por último, pero no menos importante:

El límite encapsulación después de la última parte del cuerpo es un delimitador distintivo que indica que no hay partes más cuerpo seguirá. un delimitador de este tipo es idéntico a los delimitadores anteriores, con la adición de dos guiones más al final de la línea:

--gc0p4Jq0M2Yt08jU534c0p-- 

espero que esto ayude a alguien más en el futuro, ya que tuve que recorrer para una mientras que antes de obtener la imagen completa (asegúrese de leer los RFC necesarios para obtener la comprensión más profunda).

+2

Nota: Content-Length debe cambiarse cuando cambie el límite – K3rnel31

+0

Creo el límite se usa para separar partes diferentes, sin indicar la longitud. – Rugal

+1

¡Por cierto, esta respuesta es genial! – Rugal

Cuestiones relacionadas