Daten per POST, Http an Website

Hallo,

übergebe Daten per String mit GET an ein Formular meiner Website.

Beispiel:

Dim sVorname, sName, sDaten, sLink
sVorname = oRecord.GetContentsByName("Firstname")
sName = oRecord.GetContentsByName("Name") 

sDaten = "Vorname=" &  sVorname & "&Name=" & Name
sLink = "http://www.MeineSeite.de/formular.php?" & sDaten

Dim WshShell
Set WshShell = WScript.CreateObject("Shell.Application")
WshShell.Open sLink
.....................

Funktioniert einwandfrei. Nur, bei einer aktuellen Umsetzung wird leider der String zu lang und bei GET somit angeschnitten.

POST ist ja hier die Lösung. Nur wie umsetzen? Aber da komme ich nicht recht voran.

Folgendes habe ich jetzt:

Dim sVorname, sName, sDaten, sLink
sVorname = oRecord.GetContentsByName("Firstname")
sName = oRecord.GetContentsByName("Name") 

sDaten = "Vorname=" &  sVorname & "&Name=" & Name
sLink = "http://www.MeineSeite.de/formular.php"

Dim oHTTP
  set oHTTP = CreateObject("MSXML2.ServerXMLHTTP.6.0")
  oHTTP.open "POST", sLink, False
  oHTTP.SetRequestHeader "Content-Type", "text/xml"
  oHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
  oHTTP.setRequestHeader "Content-Length", Len(sDaten)
  oHTTP.Send sDaten

    MsgBox oHTTP.responseText
.................

Hier habe ich drei Fragen?
Die MsgBox gibt mir den Header meines Formulares aus. Also besteht die Verbindung. Aber die Website, also das Formular selbst wird nicht angezeigt/gestartet/geöffnet. Was fehlt noch?

Ist, wäre die Übergabe der Daten in der GET Form hier überhaupt so richtig? Bei php ist es mit ja anders.

Das Verzeichnis ist natürlich geschützt. Wie übermittle ich mit dem sLink Benutzer und Passwort?

Vielen, vielen Dank!

Viele Grüße

Robert

Hallo!
Sieht nach VBScript aus. Leider keine Ahnung wie das damit geht.
Alternative:
Verwende das Kommandozeilentool curl , welches du dann dynamisch aufrufst.
siehe https://curl.haxx.se/
alternativ bietet C# (bzw. C#-Scripting) hier mehr Möglichkeiten.
Siehe HttpWebRequest (.NET)

Pit

Hi Robert,

vielleicht helfen dir folgende Links:

vbscript - Automate form Submission - Stack Overflow (hier ist wohl den letzter Kommentar zur Antwort beachtenswert)

Gruß
Alex

Hallo Pit,

danke für Deine Antwort. Ja, ist VBScript, und das geht auch damit. Muss das nur noch finden oder halt wieder solange rumprobieren. Es gibt im web ja eine Menge solcher Snippets. Leider hat noch keines gepasst. Deswegen hab ich hier mal nachgefragt.

Viele Grüße

Robert

Hallo Alex, danke für die Info. Muss das am WE wieder probieren. Meld mich dann.
VG Robert

Hallo Alex,
hallo zusammen,

in hunderten von Beispielen im Netz ist es im Kern immer die gleiche Sequenz:

[code]Dim oHTTP
set oHTTP = CreateObject(„MSXML2.ServerXMLHTTP“)
oHTTP.open „POST“, sUrl, false, sUser, sPass

oHTTP.Send „vorname=Robert&nachname=Kampfl“

WScript.Echo oHTTP.responseText
WScript.Echo oHTTP.responseBody
[/code]
Die Schreibweise mit sUser und sPass ist dabei korrekt und bringt auch Zugang zu meinem geschützten Formular.

Der Schlüsselbefehl lautet m.E. dabei
WScript.Echo oHTTP.responseBody
Dieser müsste dann die Website anzeigen.

…responseText bringt mir dabei den gesamten Quellcode meiner Website. Wird angezeigt in einem Fenster der combit Oberfläche.

Interessant dabei ist, dass auch (nach einer etwas längeren Rechnerlaufzeit) …responseBody ein solches Fenster bringt. Jedoch nicht mehr mit dem Quelltext meiner Seite (oder vielleicht doch), sondern mit kompletten chinesischen Schriftzeichen.

Meine Vermutung ist nun, dass die combit eigene VBScript Implementierung hier etwas nicht zulässt. Lässt mich sozusagen nicht raus aus der Oberfläche. Ansonsten müsste das funktionieren.

Jetzt stell ich die Frage, was noch fehlt bzw. was noch notiert werden muss, dass ich da raus komme. WScript.Quit z.B. hilft nicht.

Dafür wäre ich echt dankbar.

Viele Grüße

Robert

Mein bisheriger Lösungsansatz:

Dim sVorname, sName, sID
sID = oRecord.GetContentsByName("DsID")
sVorname = oRecord.GetContentsByName("Firstname")
sName = oRecord.GetContentsByName("Name") 

Dim sUrl
sUrl = "http://www.meineURL.de/formular.php?ID=sID  '// GET ist hier möglich

Dim objIE
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Visible = True
objIE.Navigate sUrl

Do While objIE.Busy
	WScript.Sleep 100
Loop

objIE.Document.getElementsByName("vorname").Item(0).Value = sVorname
objIE.Document.getElementsByName("name").Item(0).Value = sName

WScript.Quit

Dabei wird mein php Formular aufgerufen und die Daten direkt in die Formularfelder eingetragen. Ein Abfangen der Variablen per POST oder GET ist dabei nicht notwendig, und auch nicht möglich. Evtl. Steuervariablen können bei der Url aber als GET (wir vor) mitgegeben werden.

Eine Begrenzung an Zeichen wie bei GET habe ich nicht festgestellt.

Es wird hier der IE aufgerufen. Bei mir läuft Chrome. Diesen Aufruf habe ich noch nicht „geschafft“. Ebenso kann ich User und Pass noch nicht übergeben. Da ich die bei mir aber nur am Anfang eintragen muss, hält sich der Aufwand in Grenzen.

Ansonsten funktioniert das Ding einwandfrei.

Gerne nehme ich aber noch Anregungen entgegen, wenn jemanden dazu noch etwas einfällt.

Danke und viele Grüße

Robert

Hallo,

zum grundsätzlichen Verständnis: du möchtest, dass 1) dein URL String, basierend auf Infos aus der DB, zusammengebaut wird und 2) bei der dann aufgerufenen Seite Informationen in bestehende Felder der Website eingetragen werden, richtig?

Zu 1) Wenn ich dich richtig verstehe, wird deine GET Anfrage zu lang. Hier wäre mE rauszufinden, wo die Limitation liegt. Ich habe ein VBScript geschrieben, das eine URL zusammensetzt, diese dann als GET an die Google Distance Matrix API sendet und die daraus resultierende XML bzw. json File runterlädt. Bei einer Adresse für den Ausgangspunkt und max. 99 Destinations pro Anfrage wird die URL entsprechend lang aber nicht abgeschnitten. Eine kurze Suche bei Stackoverflow hat ergeben, dass die maximale Länge, je nach Browser und Serverkonfiguration zwischen 2 und 8 KB sein kann. (web services - Maximum length of HTTP GET request - Stack Overflow)

Zu 2) Da du ja auch für anderweitige Anregungen offen scheinst: Ich habe User Angaben im Browser über C# und das Selenium Framework umgesetzt. Ist jetzt nicht die stabilste Umsetzung, aber funktioniert.

Viele Grüße