Alt 01.02.2012, 08:17:17   #1 (permalink)
Primus inter pares
Benutzerbild von DaPhreak

ID: 30143
Lose-Remote

DaPhreak eine Nachricht über ICQ schicken
Reg: 08.05.2006
Beiträge: 2.024
DaPhreak genießt hohes AnsehenDaPhreak genießt hohes AnsehenDaPhreak genießt hohes AnsehenDaPhreak genießt hohes AnsehenDaPhreak genießt hohes AnsehenDaPhreak genießt hohes AnsehenDaPhreak genießt hohes AnsehenDaPhreak genießt hohes AnsehenDaPhreak genießt hohes AnsehenDaPhreak genießt hohes AnsehenDaPhreak genießt hohes Ansehen
Standard (VBScript) HTTP-Requests

Hallo alle,

Der Präfix passt nicht ganz, meine Frage bezieht sich nicht auf VB sondern auf VBS. Ich hatte VBS ehrlich gesagt Jahrelang sträflich ignoriert (Ihh, Basic), aber in letzter Zeit doch irgendwie ein bisschen für mich entdeckt. Um kleinere Dinge unter Windows zu automatisieren ohne auf eine Konsole beschränkt zu sein (BAT/CMD) und ohne nen Compiler oder Interpreter aufsetzen zu müssen ist es manchmal nicht schlecht. Die Sprache selbst ist zwar 'ne ziemliche Katastrophe, aber ich will ja keine großen Softwareprojekte entwickeln.

Zu meiner Frage: Ich will in einem VBS in bestimmten Zeitabständen Aktionen ausführen und deren Erfolg an einen Webserver melden. Ersteres läuft schon länger, für zweiteres will ich einfach ein kleines PHP-Script abrufen und den Status per GET übermitteln. Was ich also brauche ist eine einfache wget-Funktionalität in VBS. Dazu habe ich 'nen Snippet gefunden, der sich bei mir, da ich die Antwort des Servers nicht benötige, vereinfacht zu

Code:
1:
2:
3:
4:
strFileURL = "http://example.org/ping.php?status=123" Set objXMLHTTP = CreateObject("MSXML2.XMLHTTP") objXMLHTTP.open "GET", strFileURL, false objXMLHTTP.send()
Das funktioniert auch wunderbar. Aber jetzt kommts: wenn ich in dem gleichen Script einen zweiten Request ausführen will, dann wird dieser nicht ausgeführt. Das Minimalbeispiel dazu wäre:

Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
strFileURL = "http://example.org/ping.php?status=123" Set objXMLHTTP = CreateObject("MSXML2.XMLHTTP") objXMLHTTP.open "GET", strFileURL, false objXMLHTTP.send() WScript.Sleep 10000 objXMLHTTP.open "GET", strFileURL, false objXMLHTTP.send()
Hier wird nur der erste ausgeführt. Ich habe auch schon probiert vor dem zweiten Request das objXMLHTTP neu anzulegen (durch einen zweiten CreateObject-Aufruf mit dem obligatorischen Set auf Nothing vorher), das geht eben so wenig. Ich bekomme in beiden Fällen als objXMLHTTP.Status eine 200, als ob alles ok wäre.

Ein Timing-Problem kann es eigentlich nicht sein, dass false nach dem open sorgt dafür, dass der Request nicht asynchron ausgeführt wird, der open-Aufruf blockiert also bis er die Antwort hat.

Hat zufällig jemand eine Idee woran das liegen könnte oder wie ich es anders lösen könnte? Was VBS angeht bin ich ein ziemlicher Noob.
"And pray that there's intelligent life somewhere out in space, because there's bugger all down here on earth." - Monty Python
DaPhreak ist offline   Mit Zitat antworten
Gesponsorte Links
Alt 01.02.2012, 17:00:12   #2 (permalink)
bekämpft die Mächte des Bösen
Benutzerbild von theHacker

ID: 69505
Lose-Remote

theHacker eine Nachricht über ICQ schicken theHacker eine Nachricht über AIM schicken theHacker eine Nachricht über MSN schicken theHacker eine Nachricht über Yahoo! schicken theHacker eine Nachricht über Skype™ schicken
Reg: 20.04.2006
Beiträge: 20.469
theHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes Ansehen
Standard

Moin,

VBScript hab ich so noch nie gemacht, aber vielleicht kann ich dir ja trotzdem weiterhelfen.
Zitat:
Zitat von DaPhreak Beitrag anzeigen
Was ich also brauche ist eine einfache wget-Funktionalität in VBS.
Hier weiß ich ned, obs für dich nicht in Frage kommt, oder du es einfach nur nicht kennst: wget gibts auch für Windows

Zitat:
Zitat von DaPhreak Beitrag anzeigen
Ich habe auch schon probiert vor dem zweiten Request das objXMLHTTP neu anzulegen (durch einen zweiten CreateObject-Aufruf mit dem obligatorischen Set auf Nothing vorher), das geht eben so wenig.
Das wundert mich jetzt doch ein wenig. Eine Art Reset-Methode gibt es nicht, also wäre die Logik, dass du ein zweites Objekt anlegst.

Ich hab dir mal den Link zur Doku rausgesucht:
http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx

Da steht aber nix von zwei Requests. (Vielleicht kannst du dich ja mit dem wget schon anfreunden )
theHacker ist offline   Mit Zitat antworten
Alt 01.02.2012, 17:12:08   #3 (permalink)
Primus inter pares
Benutzerbild von DaPhreak

ID: 30143
Lose-Remote

DaPhreak eine Nachricht über ICQ schicken
Reg: 08.05.2006
Beiträge: 2.024
DaPhreak genießt hohes AnsehenDaPhreak genießt hohes AnsehenDaPhreak genießt hohes AnsehenDaPhreak genießt hohes AnsehenDaPhreak genießt hohes AnsehenDaPhreak genießt hohes AnsehenDaPhreak genießt hohes AnsehenDaPhreak genießt hohes AnsehenDaPhreak genießt hohes AnsehenDaPhreak genießt hohes AnsehenDaPhreak genießt hohes Ansehen
Standard

Zitat:
Zitat von theHacker Beitrag anzeigen
Hier weiß ich ned, obs für dich nicht in Frage kommt, oder du es einfach nur nicht kennst: wget gibts auch für Windows
GnuWin64? Wäre ne Option. Müsste ich dann quasi als externes Programm aufrufen.

Mir hats halt gefallen, dass ich im VBS alles zur Verfügung habe, den Response-Status und ggf. sogar den ganzen body falls das Script noch ne Ausgabe macht.

Aber ok im konkreten Fall wäre die Funktionalität verzichtbar.

Wobei ich dann natürlich auch ein separates VBS machen könnte was ich aufrufe, 1 Request pro Scriptlaufzeit geht ja.

Zitat:
Zitat von theHacker Beitrag anzeigen
Das wundert mich jetzt doch ein wenig. Eine Art Reset-Methode gibt es nicht, also wäre die Logik, dass du ein zweites Objekt anlegst.

Ich hab dir mal den Link zur Doku rausgesucht:
http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx
Danke. Neues Objekt anlegen habe ich ja quasi probiert. Ich kann halt das alte nicht wirklich freigeben, nur auf Nothing setzen. Vermute mal die Garbage Collection nimmt sich dann dessen an. Schon komisch, dass das nicht geht.
"And pray that there's intelligent life somewhere out in space, because there's bugger all down here on earth." - Monty Python
DaPhreak ist offline Threadstarter   Mit Zitat antworten
Antwort

Gesponsorte Links

Anzeige


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[PHP] cURL Get Requests xdragonx Programmierung 6 23.10.2011 15:38:20
[V] Fachliteratur zur Programmierung von HTML, JavaScript, C, XML, VBA, VBScript und Computerlexikon CrazySash Lose4Misc 13 23.12.2009 09:19:46
[S] Einfaches VBScript zum öffnen und schließen des IEs matzee Scripts & Software 3 04.04.2008 21:18:37
VBScript Timer verwenden Sebmaster Scripts & Software 0 27.06.2007 18:00:38


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:46:45 Uhr.