[CGI] Veel data meegeven

Pagina: 1
Acties:

  • Sir Isaac
  • Registratie: September 2002
  • Laatst online: 21-05-2025
Ik ben een cgi script aan het schrijven dat een lange lijst bestandsnamen als input nodigheeft. Die zou ik met de GET methode makkelijk in de Query_String kunnen pompen, maar dan krijg je een url van een paar honderd karakters. Ik weet niet of dat uberhaupt kan, maar ik vind dat hoe dan ook onelegant. Wie heeft geen hekel aan mailtjes waar een url in staat van 3 regels.
Een alternatieve methode is om de lijst op te slaan en het script bij iedere aanroep de lijst van de schijf te laten lezen. Ook niet echt elegant.
Ik zou daarom graag de lijst met de POST methode versturen naar mijn cgi script. Hoe kun je dit doen vanuit een html bestand? Normaal wordt de POST methode gebruikt om gegevens uit een formulier te verzenden. Omdat ik geen user input nodig heb, kan dat in dit geval niet. Of is het mogelijk om een formulier met alleen verborgen controls te maken en de gegevens te versturen op het moment dat de gebruiker op een link in het document klikt?

Verwijderd

Ja. Dat is mogelijk.

  • Sir Isaac
  • Registratie: September 2002
  • Laatst online: 21-05-2025
Heel mooi dat het kan, maar het is me nog niet gelukt. Ik heb een cgi scriptje geschreven dat POST data van stdin leest en die weergeeft in de browser. Als ik een html pagina maak met een formulier en een normale submit knop werkt alles. Maar zonder submit knop niet:
Hier mijn code:
code:
1
2
3
4
5
6
7
<BODY>
<H1>Test Formulier</H1>
<FORM METHOD="POST" ACTION="TestPost.py">
<INPUT TYPE="hidden" NAME="Secret" VALUE="Secret Information">
<INPUT TYPE="submit" NAME="SubmitButton" VALUE="Send">
</FORM>
</BODY>

AIs ik regel 5 (De submit INPUT) weg laat kan de cgi script niets van stdin lezen. Logisch, want er valt wordt niets verzonden. Hoe kan ik een POST commando forceren in de html code?

[ Voor 24% gewijzigd door Sir Isaac op 10-08-2005 20:55 ]


  • dingstje
  • Registratie: Augustus 2002
  • Laatst online: 02-01-2024
Je kan geen informatie POSTen zonder een formulier te submitten. Je zou in principe kunnen gaan voor een JavaScript oplossing. Elke klik op een link zet dan een extra variable in de te POSTen gegevens en doet een form.submit(). Naast het feit dat een *zeer* ugly hack is, heeft het ook enkele praktische bezwaren: je kan geen URL's doorgeven aan elkaar en telkens wanneer de gebruiker op back drukt krijg hij een warning dat de pagina 'verlopen' is en de data opnieuw gePOST moet worden.

Een betere oplossing is gebruik maken van persisted sessies. Ik ga ervan uit dat je gebruik maakt van Python gezien ACTION="TestPost.py", ik veronderstel dat deze daar wel standaard support voor heeft. Maar dat komt er eigenlijk ook op neer dat de data ergens op de server (in geheugen of op schijf) opgeslagen wordt. Dat is iig een meer propere oplossing dan alles POSTen.

Ik zie overigens ook dat de naam van je hidden field 'SECRET' is. Je houdt er rekening mee dat elke bezoeker deze informatie kan lezen? Gooi er dus niet je databasepaswoord ofzo in.

If you can't beat them, try harder


  • Calamor
  • Registratie: Oktober 2004
  • Laatst online: 02-05 12:25
Het lijk me het makkelijkst als de data opteslaan en dat de script de data ophaalt. Dan hoef je niet een hele lange link te tegeven.

  • HunterPro
  • Registratie: Juni 2001
  • Niet online
Als je niet wilt dat de gebruiker er mee kan klooien, moet je ze niet aan de gebruiker geven. Gebruik cookies, sessies en sessie-variables.

  • Sir Isaac
  • Registratie: September 2002
  • Laatst online: 21-05-2025
@dingstje:
Ik was er inmiddels al wel bang voor dat het niet met een POST zonder formulier submit zou lukken. Persistent sessions is wat veel van het goede: ik hoef alleen een lijst beschikbaar te hebben tussen de sessies.
Dat het verborgend veld "SECRET" heet is alleen omdat het verborgen is. Ik zou er echt geen geheime info in stoppen.

@Calamor.
Die optie had ik al genoemd in mijn openings post. Ik hoopte alleen dat ik zonder disk i/o kon doen. (Kan evt. alsnog met een ramdisk) Ik ga toch voor deze optie.

@HunterPro:
Dat is het punt niet. Ik wilde alleen voorkomen dat ik een hele lange QUERY_STRING moest meegeven.

  • muba
  • Registratie: April 2002
  • Laatst online: 19-10-2013

muba

Prince of Persia!

Is het niet zo dat een url (inclusief query string) niet >256 tekens mag zijn?
Gewoon ff ter mijner informatie hoor.

Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea


  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Sir Isaac schreef op woensdag 10 augustus 2005 @ 22:15:
@HunterPro:
Dat is het punt niet. Ik wilde alleen voorkomen dat ik een hele lange QUERY_STRING moest meegeven.
daar zijn juist die sessions handig voor, met een session is het enige wat je hoeft mee te sturen een session_id welke je het beste in een cookie kan zetten. Je cgi-applicatie leest dat session_id en zoekt de gegevens die bij die session horen erbij zonder dat al die data keer op keer over de lijn gezet moeten worden (en steeds weer opnieuw gevalideerd moeten worden...)

  • djc
  • Registratie: December 2001
  • Laatst online: 08-09-2025

djc

Volgens mij moet je eens kijken naar XMLHTTPRequest. Zie ook hier.

En in tegenstelling tot wat je misschien denkt: XMLHTTPRequest is ook te gebruiken voor niet-XML data (bijvoorbeeld Javascript, om te evalueren, CSV-achtige data, of iets anders).

[ Voor 40% gewijzigd door djc op 11-08-2005 01:23 ]

Rustacean


  • Ciqniz
  • Registratie: Oktober 2002
  • Laatst online: 07-09-2023

Ciqniz

On the move...

Cookies...
Of anders toch:

code:
1
2
3
4
5
<form name="blabla" action="nextpage.cgi" method="post">
<input type="hidden" name="secretinfo" value="i see dead people">
</form>

<a href="javascript:document.all.blabla.submit();">


Alhoewel het best ranzig is natuurlijk. Ik zou iig voor cookies gaan...
(Kan best zijn dat bovenstaande code niet of niet optimaal werkt, heb het niet getest. Maar het geeft je er een idee van...)
Pagina: 1