Avatar billede lasserasch Juniormester
17. august 2005 - 00:26 Der er 30 kommentarer og
1 løsning

Hvordan sendes en POST form uden at brugeren ser det?

Hejsa...

Jeg har brug for at sende nogle data af sted via POST eller GET i en form.

Jeg skal bruge det sammen med en SMS gateway jeg har købt hos CoolSMS. Normalt vil jeg bare redirecte brugeren til den side hvor data fra formen postes hen, men kan man ikke sende nogle data af sted uden af brugeren bliver redirected til siden? Altså en eller anden form for Serverside posting!

Forstår nogen hvad jeg mener? Jeg har kigget lidt på Server.transfer da den sender data af sted og sender herefter redirecter brugeren tilbage til siden hvor man kom fra, men jeg kan ikke få det til at virke.


Helt præcist har jeg brug for at en bruger kan trykke på en submit button på min egen ASP side.

Herefter skal der sendes nogle data af sted til en anden server (Hos CoolSMS). Herefter skal brugeren se en side på min egen server.

Men nuværende form ses herunder (Dog uden brugernavn/Password til CoolSMS siden)

Hvordan pokker griber man det an? Supporten hos CoolSMS siger at man godt kan, men de ved intet om ASP så derfor var der ikke meget hjælp at hente der!

Pt. sendes data af sted, SMS'en kommer frem til min TLF. og jeg præsenteres for en side hos CoolSMS hvor der står : SMS afsendt korrekt!

Det kan jeg jo ikke tilbyde mine brugere.


Håber en kan hjælpe!



Her kommer min nuværende FORM


-----------

<form action="http://sms.coolsmsc.dk/" method="post" >
<input type="hidden" name="username" value="mitbrugernavn">
<input type="hidden" name="password" value="mitpassword">
<table><tr><td>Dit Mobilnummer</td>
<td><input type="text" name="from" value=""></td></tr>
<tr><td>Motager Mobilnummer</td>
<td><input type="text" name="to" value="4520319502"></td></tr>
<tr><td colspan="2"> <textarea cols="40" rows="6" name="message"></textarea></td></tr></table>
<br>
<input type="submit" value="SEND BESKED">
</form>


------------


Mvh.
Lasse Rasch.
Avatar billede softspot Forsker
17. august 2005 - 00:35 #1
Du må være på jagt efter MSXML2.XMLHTTP. Den kan lave requests til http-adresser programmatisk:

<%@ language="JScript" %>
<%
var strURL = "www.dinurl.dk";

try
{
    var objXML = Server.CreateObject("MSXML2.XMLHTTP");
    try
    {
        objXML.open("GET", strURL , false);
        objXML.send();
       
        if(objXML.status == 200)
            return "OK";
        else
            return "Fejl under kontakt med server.";
    }
    catch(e) {
        return "Fejl under åbn eller send til server.";
    }
}
catch(e) {
    return "Fejl under oprettelse af request-objekt.";
}
%>
Avatar billede softspot Forsker
17. august 2005 - 00:35 #2
Du kan også poste data med dette objekt... finder lige noget kode...
Avatar billede lasserasch Juniormester
17. august 2005 - 00:40 #3
Ok. Jeg forstår ikke helt den kode du har skrevet i første kommentar. Kan du ikke forklare mig hvad jeg skal gøre???

Kan det også lade sig gøre at poste flere gange? Hvis jeg ønsker at sende en SMS ud til flere telefonnumre skal jeg nemlig kalde siden 1 gang for hver telefonnummer jeg ønsker at sende til!

Det skulle så være noget med at jeg først spørger min SQL database om en liste af telefonnumre, og så poster en gang for hvert telefonnummer den finder.
Avatar billede softspot Forsker
17. august 2005 - 00:51 #4
Hvis du laver en funktion ud af det kode jeg viste, kan du let kalde den flere gange med en ny adresse hver gang. F.eks.:

<%@ language="JScript" %>
<%
function sendMessage(strURL)
{
    try
    {
        // opret objektet der kan sende requests
        var objXML = Server.CreateObject("MSXML2.XMLHTTP");
        try
        {
            // åbn forbindelsen til den URL som funktionen er kaldt med
            objXML.open("GET", strURL , false);

            // send forspørgslen til serveren
            objXML.send();
       
            // aflæs statuskoden af kaldet til adressen
            if(objXML.status == 200)
                return "OK";
            else
                return "Fejl under kontakt med server.";
        }
        catch(e) {
            return "Fejl under åbn eller send til server.";
        }
    }
    catch(e) {
        return "Fejl under oprettelse af request-objekt.";
    }
}

var fejlTekst = "";
// kald serveren med en adresse
fejlTekst = sendMessage("http://www.dinserver.dk/side.asp?param1=1&param2=blablaaah");
fejlTekst = sendMessage("http://www.dinserver.dk/side.asp?param1=2&param2=blablablaaah");
fejlTekst = sendMessage("http://www.dinserver.dk/side.asp?param1=3&param2=yadayadayadayada");
%>


Du kan evt. gøre noget med fejlTeksten, f.eks. gemme den i en database eller skrive den ud til brugeren, men det hører vist til i en anden opgave...
Avatar billede lasserasch Juniormester
17. august 2005 - 01:05 #5
Ok.

Forstår jeg det korrekt hvis jeg har opfattet det således :

1.
Jeg skal stadig have min form på min første side, hvor brugeren indtaster nogle data i nogle forskellige felter.

2.
På min submit button skal jeg fortælle at "onsubmit" skal min form udføre funktionen du har skrevet herover.

3.
Hvad så med Form Action? Skal jeg helt slette den eller poste til samme side eller hvordan?

Hvis jeg har forstået det korrekt skal jeg i bunden af funktionen bruge sendMessage til at poste data af sted til den eksterne server. I min sendMessage skal jeg f.eks. skrive :

sendMessage("http://sms.coolsms.dk?username=<%=username%>&password=<%=password%>");


Herefter kan jeg så afslutte ASP med %> og fortsætte med at skrive noget HTML kode, som brugeren så bliver præsenteret for!

Har jeg forstået det korrekt?

Ja, det kan godt være jeg virker lidt dum, men man skal jo lære det på et tidspunkt!


/Lasse
Avatar billede softspot Forsker
17. august 2005 - 01:16 #6
1. ja

2. nej, det ligger på serveren i fortolkningen af formularens indhold

3. postes til den serverside som indeholder koden jeg viste (sig selv hvis det er der koden ligger).

sendMessage skal kaldes udenfor funktionen (eller kommer du ud i noget snavs med rekursion og stackoverflow - og det vil du nok ikke... :)).

Jeg synes ikke du virker dum. Det er meget naturligt at man har spørgsmål til et nyt område...
Avatar billede lasserasch Juniormester
17. august 2005 - 01:35 #7
Ok. Hvis du ikke er smuttet i seng, vil du så ikke prøve at stille det op i et praktisk eksempel, hvor der kun bruges en ASP side.

Og så skrive det som et svar! Så får du lige points med i samme omgang!
Avatar billede polle007 Nybegynder
17. august 2005 - 01:37 #8
En anden ting, det er vel heller ikke smart at have brugernavn og password liggende i en form på klientsiden. Så kan din konto hurtigt blive misbrugt
Avatar billede lasserasch Juniormester
17. august 2005 - 01:41 #9
Nej, helt korrekt! Endnu en grund til at lave om på det for mig.

Det er nu ikke så kritisk igen, da det skal bruges på et intranet. Men alligevel...
Avatar billede softspot Forsker
17. august 2005 - 02:03 #10
Jeg har ændret lidt på funktionen, så den er i stand til at tage postData med i parameterlisten. Desuden har jeg fjernet brugernavn og adgangskode fra klienten og lagt det i serverkoden. Hvordan du rent faktisk opbevarer disse oplysninger ligger vist i et andet scope et dette spørgsmål (men en database ville da være et bud)...

Here goes:

<%@ language="JScript" %>
<%
function sendMessage(strURL,postData)
{
    try
    {
        // opret objektet der kan sende requests
        var objXML = Server.CreateObject("MSXML2.XMLHTTP");
        try
        {
            // åbn forbindelsen til den URL som funktionen er kaldt med
            objXML.open("POST", strURL , false);

            // send forspørgslen til serveren
            objXML.send(postData);
       
            // aflæs statuskoden af kaldet til adressen
            if(objXML.status == 200)
                return "OK";
            else
                return "Fejl under kontakt med server.";
        }
        catch(e) {
            return "Fejl under åbn eller send til server.";
        }
    }
    catch(e) {
        return "Fejl under oprettelse af request-objekt.";
    }
}
if(Request.Form("goSend").toString() != "") {
  var fejlTekst = "";
  // sæt formdata der skal sendes til SMS-serveren op
  // pga. den form som er postet til denne side...
  // username og password indsættes på serveren, så det ikke ligger på klienten.
  var postData = "username=mitbrugernavn&password=minadgangskode";
  postData += "&from=" + Request.Form("from");
  postData += "&to=" + Request.Form("to");
  postData += "&message=" + Request.Form("message");

  // kald serveren med en adresse
  fejlTekst = sendMessage("http://www.coolsmsc.dk/",postData);
}
%>
<html>
<head>
<title>send sms</title>
</head>
<body>
<form method="post" >
  <table>
    <tr>
      <td>Dit Mobilnummer</td>
      <td><input type="text" name="from" value=""></td></tr>
    <tr>
      <td>Motager Mobilnummer</td>
      <td><input type="text" name="to" value="4520319502"></td></tr>
    <tr>
      <td colspan="2">
        <textarea cols="40" rows="6" name="message"></textarea></td></tr>
  </table>
  <br>
  <input type="submit" name="goSend" value="SEND BESKED">
</form>
</body>
</html>
Avatar billede lasserasch Juniormester
17. august 2005 - 02:07 #11
Hmmm.... har kopieret din kode ind, men får nu følgende fejl!


-----------


Microsoft JScript runtime error '800a01b6'

Object doesn't support this property or method

/modules/smssender/senddata.asp, line 31
---------
Avatar billede softspot Forsker
17. august 2005 - 02:18 #12
Hvilken linie er det?

Umiddelbart gætter jeg på

if(Request.Form("goSend").toString() != "") {

prøv med

if(Request.Form("goSend") != "") {
Avatar billede lasserasch Juniormester
17. august 2005 - 02:24 #13
Jeps... Var den linie. Det ser dog ikke ud som om der kommer nogle data igennem hos CoolSMS.

Nå, jeg vil i seng nu! Husk at give et svar i stedet for kommentar så jeg kan få skudt nogle points af!

Tak for hjælpen her til aften....


/Lasse
Avatar billede softspot Forsker
17. august 2005 - 02:30 #14
Det var så lidt. Vi skal lige have fundet ud af hvorfor der ikke kommer data igennem til CoolSMS. Det kan være der er et hint i variablen fejlTekst...
Avatar billede lasserasch Juniormester
17. august 2005 - 02:33 #15
Tjaee.... Jeg har bare stadig lidt svært ved at se helt præcist hvornår funktionen bliver kaldt. Skal den virkelig ikke kaldes fra formen når denne submittes.

Jeg mente bare at en funktion først blev udført når den blev kaldt fra scriptet og ikke automatisk når scriptet løbes igennem første gang!
Avatar billede softspot Forsker
17. august 2005 - 02:51 #16
Den bliver kaldt her:

fejlTekst = sendMessage("http://www.coolsmsc.dk/",postData);

men det er naturligvis kun forudsat at der er indhold i Request.Form("goSend") (som jo er submitknappens tekst, der kun sendes med hvis der er trykket på knappen).
Avatar billede softspot Forsker
17. august 2005 - 10:22 #17
Der mangler lige en header for at man kan post formdata til modtageren, men den skulle være rettet op i dette script:

<%@ language="JScript" %>
<%
function sendMessage(strURL,postData)
{
    try
    {
        // opret objektet der kan sende requests
        var objXML = Server.CreateObject("MSXML2.XMLHTTP");
        try
        {
            // åbn forbindelsen til den URL som funktionen er kaldt med
            objXML.open("POST", strURL , false);
            objXML.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=utf-8");

            // send forspørgslen til serveren
            objXML.send(postData);
       
            // aflæs statuskoden af kaldet til adressen
            if(objXML.status == 200)
                return "OK";
            else
                return "Fejl under kontakt med server.";
        }
        catch(e) {
            return "Fejl under åbn eller send til server.";
        }
    }
    catch(e) {
        return "Fejl under oprettelse af request-objekt.";
    }
}
if(Request.Form("goSend") == "SEND BESKED") {
  var fejlTekst = "";
  // sæt formdata der skal sendes til SMS-serveren op
  // pga. den form som er postet til denne side...
  // username og password indsættes på serveren, så det ikke ligger på klienten.
  var postData = "username=mitbrugernavn&password=minadgangskode";
  postData += "&from=" + Request.Form("from");
  postData += "&to=" + Request.Form("to");
  postData += "&message=" + Request.Form("message");
  postData = Server.URLEncode(postData);

  // kald serveren med en adresse
  fejlTekst = sendMessage("http://www.coolsmsc.dk/",postData);
}
%>
<html>
<head>
<title>send sms</title>
</head>
<body>
<form method="post" >
  <table>
    <tr>
      <td>Dit Mobilnummer</td>
      <td><input type="text" name="from" value=""></td></tr>
    <tr>
      <td>Motager Mobilnummer</td>
      <td><input type="text" name="to" value="4520319502"></td></tr>
    <tr>
      <td colspan="2">
        <textarea cols="40" rows="6" name="message"></textarea></td></tr>
  </table>
  <br>
  <input type="submit" name="goSend" value="SEND BESKED">
</form>
</body>
</html>
Avatar billede lasserasch Juniormester
17. august 2005 - 18:11 #18
Nope.... Det virker stadig ikke. Er der ikke en måde hvorpå man kan se hvad der bliver udført? Det sker nada når jeg forsøger.

Du kan evt. selv prøve på http://bowlnfun.flexynet.dk/modules/smssender/senddata.asp

P.S.

Skriv lige tilbage når du har prøvet for så ændrer jeg siden, så alle der læser dette indlæg ikke begynder at sende sms'er fra siden.

Man skal angive 45 foran modtagernummeret, dog ikke ved afsendernummeret.
Avatar billede softspot Forsker
17. august 2005 - 19:25 #19
Hmmm... jeg har lavet en lille testbænk herhjemme hvor jeg forsøger at poste til en anden side (godt nok lokalt) og det fugerer fint nok at få data over til siden. Jeg poster lige min kode her så kan du selv teste den, for det er vist lidt risikabelt at åbne for fri SMS'er her :)

Min kode ser ud som følger (serverpostJScript.asp):

<%@ language="JScript" %>
<%
function sendMessage(strURL, postData)
{
  try
  {
    // opret objektet der kan sende requests
    var objXML = Server.CreateObject("MSXML2.XMLHTTP.3.0");
    try
    {   
      // åbn forbindelsen til den URL som funktionen er kaldt med
      objXML.open("POST", strURL, false);
      objXML.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=utf-8");
   
      // send forspørgslen til serveren
      objXML.send(postData);

      // aflæs statuskoden af kaldet til adressen
      if(objXML.status == 200)
          return objXML.responseText;
      else
        return "Fejl under kontakt med server.";
    }
    catch(e) {
      return "Fejl under åbn eller send til server.";
    }
  }
  catch(e) {
    return "Fejl under oprettelse af request-objekt.";
  }
}

var fejlTekst = "";

if(Request.Form("goSend") == "SEND BESKED")
{
  // sæt formdata der skal sendes til SMS-serveren op
  // pga. den form som er postet til denne side...
  // username og password indsættes på serveren, så det ikke ligger på klienten.
  postData = "username=mitbrugernavn&password=minadgangskode";
  postData += "&from=" + Request.Form("from");
  postData += "&to=" + Request.Form("to");
  postData += "&message=" + Request.Form("message");
  //postData = Server.URLEncode(postData);
 
  // kald serveren med en adresse
  fejlTekst = sendMessage("http://localhost/sandkassen/asp30/diversetests/serverpostServer.asp", postData);
}

%>
<html>
    <head>
        <title>send sms</title>
    </head>
    <body>
        <%=fejlTekst%>
        <form method="post">
            <table>
                <tr>
                    <td>Dit Mobilnummer</td>
                    <td><input type="text" name="from" value=""></td></tr>
                <tr>
                    <td>Motager Mobilnummer</td>
                    <td><input type="text" name="to" value="4520319502"></td></tr>
                <tr>
                    <td colspan="2">
                        <textarea cols="40" rows="6" name="message"></textarea></td></tr>
            </table>
            <br>
            <input type="submit" name="goSend" value="SEND BESKED">
        </form>
    </body>
</html>

og serveren (serverpostServer.asp):

<%@ language="vbscript" %>
<%
Response.Write("Server kontaktet med flg. parametre: <br>")
for each par in request.form
    Response.Write("&nbsp;&nbsp;&nbsp;" & par & " = " & request.form(par) & "<br>" & vbcrlf)
next
%>


Det faktum at serverpostJScript er lavet i JScript er irelevant - det kunne ligeså godt have været i VBScript. Som du kan se er serveren i VBScript, hvilket ser ud til at fungere fint (her i det mindste).

Jeg har desuden fjernet Server.URLEncode på postData, hvilket gave lidt problemer med formatteringen på serveren (givetvis fordi jeg ikke unencoder igen på serveren).
Avatar billede lasserasch Juniormester
17. august 2005 - 19:36 #20
Kanon! Nu virker det sgu!

Tror du ikke det kan være noget med unencoder så? Det er bare skide godt softspot. Mange tak for hjælpen! Nu kan jeg igen sove roligt om natten! *GG*.....

/Lasse.

Lader lige siden stå åben de næste 5 min, så du selv evt. kan prøve!

http://bowlnfun.flexynet.dk/modules/smssender/serverpostJScript.asp
Avatar billede softspot Forsker
17. august 2005 - 19:46 #21
Jeg er overbevist om at det har være encoding der drillede. Super godt at du fik det til at fungere, så har jeg da i det mindste bedre samvittighed over at have modtaget så mange point :)

P.S. Prøvede lige at sende en SMS, men har dog ikke modtaget noget endnu, så jeg nåede det nok ikke... :) - Det er nu også fint nok for mig at du siger det fungerer :D
Avatar billede lasserasch Juniormester
17. august 2005 - 19:48 #22
Ok!

Mange tak for hjælpen!
Avatar billede softspot Forsker
17. august 2005 - 19:54 #23
Mange tak for point :)
Avatar billede lasserasch Juniormester
17. august 2005 - 20:29 #24
Ok. Nu er det bare for at være vildt besværlig *GG*....

Jeg har nu integreret asp filen ind i min øvrigt side,  som er i VBScript
Den integreres som en include fil midt i min side.

Jeg har RIGTIG MEGET kode i min anden side, som virker fint! Men man kan åbenbart ikke bruge Jscript og VBscript samtidig. Har lige prøvet at se om jeg kan rettet koden til, så det er VBScript i stedet for Jscript. Men jo mere jeg redigerer, jo værrere bliver det.

Du siger det er lige meget hvilket sprog det er! Men nogle tegn f.eks. { og ; laver fejl i VBScript. Ville det være for meget, at spørge om du hurtigt kan omskrive det til VBScript, som jeg kender lidt mere til!
Avatar billede lasserasch Juniormester
17. august 2005 - 20:31 #25
Heysa igen! Jeg har iøvrigt lige modtaget en SMS. "Hej migselv fra en glad eksperten bruger." Var det din?
Avatar billede softspot Forsker
17. august 2005 - 20:39 #26
Ja! :) Hmm... mon jeg glemte at skifte telefonnr til mit eget som modtager... ;)

Jeg havde tilfældigvis lavet det ikke begge sprog, så det skulle være en smal sag at give dig VBScript-udgaven ;) Den kommer her (bemærk at noget af fejlhåndteringen er fjernet - fordi jeg var doven :)):

function sendMessage(strURL, postData)
    ' opret objektet der kan sende requests
    set objXML = Server.CreateObject("MSXML2.XMLHTTP.3.0")
   
    ' åbn forbindelsen til den URL som funktionen er kaldt med
    objXML.open "POST", strURL, false
    objXML.setRequestHeader "Content-Type","application/x-www-form-urlencoded; charset=utf-8"
   
    ' send forspørgslen til serveren
    objXML.send(postData)

    ' aflæs statuskoden af kaldet til adressen
    if objXML.status = 200 then
        sendMessage = objXML.responseText
    else
        sendMessage = "Fejl under kontakt med server."
    end if
end function

fejlTekst = ""

if Request.Form("goSend") = "SEND BESKED" then
  ' sæt formdata der skal sendes til SMS-serveren op
  ' pga. den form som er postet til denne side...
  ' username og password indsættes på serveren, så det ikke ligger på klienten.
  postData = "username=mitbrugernavn&password=minadgangskode"
  postData = postData & "&from=" & Request.Form("from")
  postData = postData & "&to=" & Request.Form("to")
  postData = postData & "&message=" & Request.Form("message")
  'postData = Server.URLEncode(postData)
 
  ' kald serveren med en adresse
  fejlTekst = sendMessage("http://localhost/sandkassen/asp30/diversetests/serverpostServer.asp", postData)
end if
Avatar billede softspot Forsker
17. august 2005 - 20:44 #27
Hmmm... "Jeg havde tilfældigvis lavet det ikke begge sprog" skulle naturligvis have været "Jeg havde tilfældigvis lavet det i begge sprog", ellers har det jo ikke meget med det jeg gerne ville sige, at gøre :)
Avatar billede lasserasch Juniormester
17. august 2005 - 21:02 #28
Jeps.... Det virker bare nu! Den eneste ting er UTF-8, som ikke kan vise danske bogstaver korrekt. Ved du hvad man skal skrive i stedet for, for at få ÆØÅ med?
Avatar billede softspot Forsker
17. august 2005 - 21:09 #29
UTF-8 kan vise danske bogstaver (der er faktisk ikke det den ikke kan vise), det er mere et spørgsmål om hvad din kildes encoding er. Mit gæt ville være ISO-8859-1 som også indeholder danske tegn (men ikke f.eks. asiatiske som UTF-8 også gør)...
Avatar billede lasserasch Juniormester
12. september 2005 - 21:06 #30
Hey Softspot.

Kan du huske at vi har snakket om encodingen for nogen tid siden, i dette script.
Det driller meget med UTF-8. Jeg har spurgt hos Cool SMS hvad deres system bruger, og de bruger : windows-1252 (CP1252)

Er det så ikke denne linie som skal ændres ???
----------
objXML.setRequestHeader "Content-Type","application/x-www-form-urlencoded; charset=utf-8"
----------

Jeg har forsøgt at ændre charset=utf-8 til charset=windows-1252
Uden held. Også til : charset=CP1252
Men også uden held. Ved du hvad man skal skrive her, for at få den rigtige encoding til Windows-1252 (CP1252) ????
Avatar billede softspot Forsker
12. september 2005 - 21:09 #31
Prøv evt. med ISO-8859-1
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