Avatar billede angelenglen Nybegynder
06. september 2011 - 13:41 Der er 9 kommentarer og
1 løsning

Tage imod HTTP Post data

Jeg har en applikation, der skal køre på en server der er offentligt tilgængelig.

Lad os antage at serveren hedder www.testserver.dk

Jeg har så brug for at en bruger kan submitte en form fra en hjemmeside via POST, og formen har så action="http://www.testserver.dk:8080"
(8080 er blot et eksempel, for at vise at det ikke skal være http's standard-port 80)

Lad os antage at denne form indeholder følgende tre felter:
"navn"
"adresse"
"tlf"

Hvad kan jeg gøre for at min applikation kan tage imod disse tre stumper data fra formen, og udfører en handling hver gang, fx :

MsgBox("Navn: " & strPostNavn & vbCrLf & "Adresse: " & strPostAdresse & vbCrLf & "Telefon: " & strPostTlf)
hvor strPostNavn, strPostAdresse og strPostTlf indeholder de modtagne data fra formen.

Håber det giver mening :-)
Avatar billede mautone Nybegynder
06. september 2011 - 14:29 #1
Hvilket sprog snakker vi om?
Avatar billede angelenglen Nybegynder
06. september 2011 - 17:20 #2
Visual Basic .Net
Avatar billede angelenglen Nybegynder
06. september 2011 - 17:20 #3
C# .Net kan måske også bruges.
Avatar billede arne_v Ekspert
06. september 2011 - 17:38 #4
Vil du lave noget kode som skal hostes af IIS/ASP.NET eller skal det vaere et standalone program?
Avatar billede angelenglen Nybegynder
06. september 2011 - 21:36 #5
Det skal være en standalone vb.net applikation.
IIS eller ASP.Net skal ikke bruges til dette.
Avatar billede arne_v Ekspert
06. september 2011 - 21:46 #6
.NET kommer med en HttpListener klasse som goer det nemt at indbygge en mini web server i en app.
Avatar billede arne_v Ekspert
07. september 2011 - 01:47 #7
C# kode:

using System;
using System.Collections.Specialized;
using System.IO;
using System.Net;

namespace E
{
    public class WebServer
    {
        public static void Main(string[] args)
        {
            HttpListener srv = new HttpListener();
            srv.Prefixes.Add("http://localhost:800/");
            srv.Start();
            while(true)
            {
                HttpListenerContext ctx = srv.GetContext();
                HttpListenerRequest req = ctx.Request;
                HttpListenerResponse resp = ctx.Response;
                Console.WriteLine(req.Url.AbsolutePath);
                foreach(String k in req.Headers.AllKeys)
                {
                    Console.WriteLine(k + " = " + req.Headers[k]);
                }
                foreach(String k in req.QueryString.AllKeys)
                {
                    Console.WriteLine(k + " = " + req.QueryString[k]);
                }
                StreamWriter sw = new StreamWriter(resp.OutputStream);
                sw.WriteLine("Det virker");
                sw.Close();
            }
            //srv.Stop();
            //srv.Close();
        }
    }
}

URL:

http://localhost:800/test?f1=123&f2=abc

Output:

/test
Connection = keep-alive
Accept = text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Charset = ISO-8859-1,utf-8;q=0.7,*;q=0.7
Accept-Encoding = gzip, deflate
Accept-Language = en-us,en;q=0.5
Host = localhost:800
User-Agent = Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0.1) Gecko/20100101 Firefox/6.0.1
f1 = 123
f2 = abc
Avatar billede arne_v Ekspert
07. september 2011 - 01:49 #8
Oversat til VB.NET:

Imports System
Imports System.Collections.Specialized
Imports System.IO
Imports System.Net

Namespace E
    Public Class WebServer
        Public Shared Sub Main(args As String())
            Dim srv As New HttpListener()
            srv.Prefixes.Add("http://localhost:800/")
            srv.Start()
            While True
                Dim ctx As HttpListenerContext = srv.GetContext()
                Dim req As HttpListenerRequest = ctx.Request
                Dim resp As HttpListenerResponse = ctx.Response
                Console.WriteLine(req.Url.AbsolutePath)
                For Each k As String In req.Headers.AllKeys
                    Console.WriteLine(k & " = " & req.Headers(k))
                Next
                For Each k As String In req.QueryString.AllKeys
                    Console.WriteLine(k & " = " & req.QueryString(k))
                Next
                Dim sw As New StreamWriter(resp.OutputStream)
                sw.WriteLine("Det virker")
                sw.Close()
            End While
            'srv.Stop();
            'srv.Close();
        End Sub
    End Class
End Namespace
Avatar billede angelenglen Nybegynder
07. september 2011 - 08:54 #9
Nice, det er vist lige præcis det jeg er ude efter :-)
Læg et svar for points :-D
Avatar billede arne_v Ekspert
07. september 2011 - 14:44 #10
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester