¿Cuál es el parámetro de límite en una solicitud HTTP de varias partes (POST)?

Intento desarrollar un gadget de barra lateral que automatice el proceso de verificar una página web para ver 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. Usando un complemento de Firefox, aquí está el aspecto del “Content-Type” del encabezado:

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

con el parámetro “límite” que parece ser aleatorio, y el POSTDATA es este:

 POSTDATA =-----------------------------99614912995 Content-Disposition: form-data; name="SOMENAME" Formulair 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 resolver esto?

El parámetro de límite se establece en un número de guiones más una cadena aleatoria 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 obtener algunos consejos y una función de ejemplo para enviar datos multipart / form ver mi respuesta a esta pregunta . No sería demasiado difícil modificar esa función para usar un bucle para cada parte que le gustaría enviar.

Para citar del RFC 1341, sección 7.2.1 , lo que considero que son los bits relevantes en el parámetro del boundary del encabezado Content-Type (para MIME):

Todos los subtipos de “multiparte” comparten una syntax común …

El campo Tipo de contenido para entidades multiparte requiere un parámetro, “límite”, que se utiliza 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 de tipo de contenido multiparte típico podría tener este aspecto:

  Content-Type: multipart/mixed; boundary=gc0p4Jq0M2Yt08jU534c0p 

Esto indica que la entidad consta 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 las partes están precedidas por la línea –gc0p4Jq0M2Yt08jU534c0p

Cosas a tener en cuenta:

  1. El límite de 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 de contenido texto / llanura).
  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, si bien no menos importante:

El límite de encapsulación que sigue a la última parte del cuerpo es un delimitador distinguido que indica que no seguirán más partes del cuerpo. Tal delimitador 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 durante un tiempo antes de obtener la imagen completa (asegúrese de leer los RFC necesarios para obtener la comprensión más profunda).

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