Domanda

Sto cercando di sviluppare un gadget barra laterale che consente di automatizzare il processo di controllo di una pagina web per l'evoluzione della mia quota di trasferimento. Sono quasi a farlo ma c'è un ultimo passo che ho bisogno di farlo funzionare: invio di un HttpRequest con i dati POST corretti ad una pagina php. Utilizzando un plugin per Firefox, ecco ciò che il "Content-Type" dell'intestazione appare come:

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

con il parametro "confine" che sembrano essere casuale, e il POSTDATA è questo:

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

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

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

Non capisco come emulare correttamente il POSTDATA con il parametro mistero "confine" a tornare.

Qualcuno sa come posso risolvere questo problema?

È stato utile?

Soluzione

Il parametro confine è impostato su una serie di trattini più una stringa casuale alla fine, ma è possibile impostare a nulla. Il problema è, se la stringa di confine si presenta nei dati di richiesta, si sarà trattato come un confine.

Per alcuni suggerimenti, e una funzione di esempio per l'invio di multipart / form-data vedere la mia risposta a questa domanda . Non sarebbe troppo difficile da modificare tale funzione per utilizzare un ciclo per ogni parte che si desidera inviare.

Altri suggerimenti

Per citare dal RFC 1341, sezione 7.2.1 , quello che ho considerare come i bit corrispondenti sul parametro boundary dell'intestazione Content-Type (per MIME):

  

Tutti i sottotipi di "multipart" condividere una sintassi comune ...

     

Il campo Content-Type per i soggetti a più parti richiede un parametro, "confine", che viene utilizzato per specificare il limite di incapsulamento. Il confine incapsulamento è definita come una linea costituita interamente da due trattini ( "-", codice decimale 45). Seguita dal valore del parametro boundary dal campo Content-Type intestazione

e poi chiarisce:

  

Così, un tipico multipart Content-Type campo di intestazione potrebbe essere simile a questo:

 Content-Type: multipart/mixed; boundary=gc0p4Jq0M2Yt08jU534c0p
  

Questo indica che l'entità costituita da più parti, ciascuna con sé una struttura che è sintatticamente identico a un messaggio RFC 822, tranne che l'area di intestazione può essere completamente vuoto, e che le parti sono ciascuno preceduto dalla linea        --gc0p4Jq0M2Yt08jU534c0p

cose da notare:

  1. Il confine incapsulamento deve avvenire all'inizio di una riga, vale a dire, a seguito di un CRLF (Carriage Return-Line Feed)
  2. Il contorno deve essere seguito immediatamente mediante un'altra CRLF ed i campi di intestazione per la parte successiva, oppure da due CRLFs, nel qual caso non vi sono campi di intestazione per la prossima parte (ed è quindi stimato essere di Content tipo text / plain).
  3. confini
  4. incapsulamento non devono avvengono entro le incapsula, e non devono più essere di 70 caratteri, senza contare i due trattini principali.

Ultimo ma non meno importante:

  

Il confine incapsulamento successivo all'ultima parte del corpo è un delimitatore distinto che indica che nessun ulteriore parti del corpo seguiranno. Tale delimitatore è identica alle delimitatori precedenti, con l'aggiunta di ulteriori due trattini alla fine della linea:

 --gc0p4Jq0M2Yt08jU534c0p-- 

Spero che questo aiuta a qualcun altro in futuro, come ho dovuto vagare per un po 'prima di ottenere il quadro completo (si prega di assicurare per leggere le RFC necessari per ottenere la comprensione più profonda).

La specifica effettivo per multipart / form-data è in RFC 7578 . Boundary è definito in Sezione 4.1 .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top