HTTP-Schnittstelle ansteuern

HuBaer

Ensign
Registriert
Aug. 2006
Beiträge
177
Hallo allerseits,

ich würde gerne ein Programm schreiben, mit dem ich die HTTP-Schnittstelle von SMS-Gateways ansteuern kann (http://ib-systems.de/dokumentation/schnittstelle_sms.pdf). Folgendes wäre wichtig:

- Das Programm muss keine grafische Oberfäche haben, es darf/soll also "silent" ablaufen.
- Es sollte möglichst wenig Ressourcen benötigen, weil es durchaus 30 Mal gleichzeitig aufgerufen werden könnte
- Es sollte mittels Kommandozeile gestartet werden können. Also dass die ganzen Daten wie Benutzername, SMS-Typ usw. als Parameter in der Kommandozeile enthalten sind

Warum ich das alles schreibe: Ich würde gerne von euch eine Empfehlung haben, erstens welche Programmiersprache am Besten dafür geeignet ist (Ich kenne ein ähnliches Tool mit Delphi) und zweitens ob ich als "ambitionierter Anfänger" in Sachen Programmieren so ein Programm auf die Beine stellen könnte. IMHO ist die erste größte Schwierigkeit, die Schnittstelle anzusteuern, da habe ich leider gar keine Ahnung.

Über Hilfe würde ich mich sehr freuen - mir wäre ein Riesengefallen getan :-)

Grüße
Christoph
 
Kann man über diese Schnittstelle umsonst SMS verschicken? Habe ich das richtig verstanden?

Sprache: Alles mögliche. Ich könnte es in C++. Perl soll es viel einfacher sein. Delphi: Keine Ahnung. Zur Not auch PHP ^^

Was C++ angeht: Ich hab hier im Forum schonmal ein paar Funktionen gepostet, die zwar viele Funktionen von mir verwenden, aber mit ein bisschen Anstrengung kann man daraus das benötigte Programm bauen.
https://www.computerbase.de/forum/attachments/internet-txt.55921/

EDIT: Na gut umsonst ist es wohl nicht.
Ganz abgesehen davon kannst du die URL einfach in den Browser schreiben. Ein Programm dafür zu schreiben wäre übertrieben eigentlich.
 
Zuletzt bearbeitet:
Kampfgnom schrieb:
Hier stand ein unnötiges Komplettzitat

Danke schonmal für die Hilfe. Nein, umsonst ist es nicht. Der Hintergrund ist der: Ich benutze das SMS-Gateway zum Versand von SMS für Feuerwehreinsätze, also praktisch Alarmierung per SMS. Dazu habe ich zwar bereits ein Tool, jedoch würde ich gerne selber eines schreiben, damit ich verschiedene Gateways durchtesten kann (die unterscheiden sich ja meistens nur in der URL). Außerdem besteht immer die Gefahr dass das jetzige Gatway irgendwann nicht mehr exisitert und dann stehe ich da. Darum will ich selber was auf die Beine stellen.
Die URL in den Browser zu schreiben ist keine gute idee. Der SMS-Versand muss vollautomatisch mit aufruf z.B. einer Batch-Datei gehen.

Gruß
Christoph
 
Zuletzt bearbeitet von einem Moderator:
Das wäre ne ziemlich einfache Lösung:

"send.vbs":
Code:
Dim para, HttpRequest, url
Set HttpRequest = CreateObject("Microsoft.XMLHTTP")
Set para = WScript.arguments

If WScript.Arguments.Count = 6 Then
	url = "http://gateway.ib-systems.de/?id=" & para(0) & "&pw=" & para(1) & "&empfaenger=" & para(2) & "&absender=" & para(3) & "&text=" & para(4) & "&type=" & para(5)
	HttpRequest.Open "GET", url, False
	HttpRequest.Send
End If

Set HttpRequest = Nothing
Set para = Nothing

Und dann einfach mit:
Code:
"send.vbs" id psw empfaenger absender smstext type
aufrufen.
Das Script lässt sich noch beliebig erweitern, also zB. Fehler auswerten, mehrmals versuchen usw.
Mit WinXP hab ich es getestet, bei den anderen Betriebssystemen bin ich mir nicht sicher ob es funktioniert.
 
Okay das sieht relativ einfach und nachvollziehbar aus. Danke schonmal. Die Rückgabe eines Errorlevels für die Batch-Datei wäre auch gut.

Edit: Ach ja, warum braucht der Aufruf des Skripts gleich mal 6-7 Mb RAM? Kann man das irgendwie senken?


Gruß
Christoph
 
Zuletzt bearbeitet:
Ich glaube nicht, dass man die RAM Auslastung ändern kann, zumindest nicht bei nem VBS bzw WSH Script.
Die Fehlerausgabe sollte aber kein Problem darstellen, ich wusste nur nicht, ob und wie das geschehen soll (Log, PopUp,...).
 
Hallo,

grafisch (also popup) sollte nichts geschehen. Am besten wäre ein Eintrag in einer Logdatei und ein Rückgabewert am Ende des Programms, den die Batch-Datei dann als Errorlevel bearbeiten kann. Vielen Dank für die Mühen!

Gruß
Christoph
 
Hallo, habe mal versucht das Script deinen Wünschen anzupassen:
send.vbs
Code:
Option Explicit
Dim para, HttpRequest, url, text, fso, log
Set HttpRequest = CreateObject("Microsoft.XMLHTTP")
Set para = WScript.arguments
Set fso = CreateObject("Scripting.FileSystemObject")

Set log = fso.OpenTextFile("C:\log.txt", 8, true)
log.Write "[" & date & " - " & time & "]: "

If WScript.Arguments.Count = 6 Then
	url = "http://gateway.ib-systems.de/?id=" & para(0) & "&pw=" & para(1) & "&empfaenger=" & para(2) & "&absender=" & para(3) & "&text=" & para(4) & "&type=" & para(5)
	HttpRequest.Open "GET", url, False
	On Error Resume Next
		HttpRequest.Send
		If Err.Number <> 0 Then ende 2
		text = cint(Left(HttpRequest.ResponseText, 3))
		If Err.Number <> 0 Then ende 3
	On Error Goto 0
	If text <> 100 Then
		ende text
	End If
Else
	ende 1
End If

ende 0

Sub ende(fehler)
	If fehler <> 0 Then
		log.Write "Nachricht an [" & para(2) & "] konnte nicht gesendet werden! Fehler: " & fehler
	Else
		log.Write "Nachricht an [" & para(2) & "] erfolgreich gesendet!"
	End If

	log.Write vbCrlf
	
	log.close
	Set HttpRequest = Nothing
	Set para = Nothing
	Set log = Nothing
	Wscript.Quit fehler
End Sub

Das Script sollte jetzt folgende Errorlevel ausgeben:
0 - Erfolgreich gesendet
1 - Falsche Anzahl an Parametern
2 - Fehler bei "Verbindung" zur Website
3 - Unerwartete "Antwort" der Website
110 bis 150 - Fehler beim Versand (entspricht dem Fehler aus der Rückmeldung (siehe pdf))

Gleichzeitig legt das Script eine log Datei an in die es jeden Versand protokolliert.
Um den Speicherort der Datei anzupassen, folgende Zeile ändern:
Code:
Set log = fso.OpenTextFile("C:\log.txt", 8, true)
(also eigentlich nur das C:\log.txt ;) )


// EDIT:
Schau dir mal diese Programm an: IBSS bzw. diesen Thread
 
Zuletzt bearbeitet:
Danke für die Hilfe :-) Bin gerade am basteln und komme bei folgendem Problem nicht weiter:

Ich will testweise in einem Aufruf zwei SMS an die gleiche Nummer verschicken, d.h. hinter dem Array "empfaenger" verbirgt sich beide Male dieselbe Handynummer. Beim ersten Request läuft alles gut, der ausgegebene Errorlevel ist 100 (Erfolgreich). Nun was sonderbares: Beim zweiten Request ist der Errorlevel immer noch 100, obwohl er 150 (Reloadsperre) sein muss, da dieselbe SMS an dieselbe Nummer versandt wurde. Außerdem kommt diese zweite Messagebox sofort nach dem Wegklicken der Ersten. Darum habe ich den Eindruck, als würde der zweie Request gar nicht mehr ausgeführt und die Variable "errorlevel" gar nicht mehr aktualisiert werden?!


url = "http://gateway.ib-systems.de/?id=******&pw=******&absender=FEUERWEHR&type=2&empfaenger=" & empfaenger(0) & "&text=" & text
HttpRequest.Open "GET", url, False
HttpRequest.Send
errorlevel = cint(Left(HttpRequest.ResponseText, 3))

MsgBox errorlevel

url = "http://gateway.ib-systems.de/?id=******&pw=******&absender=FEUERWEHR&type=2&empfaenger=" & empfaenger(1) & "&text=" & text
HttpRequest.Open "GET", url, False
HttpRequest.Send
errorlevel = cint(Left(HttpRequest.ResponseText, 3))

MsgBox errorlevel
 
Ist die Problembeschreibung einigermaßen verständlich?

Gruß
 
Probier Doch vorher mal ein HttpRequest.Close sofern es so etwas gibt. Ein zweimailiges Open sieht für mich suspekt aus.

MfG

Arnd
 
Arnd schrieb:
Probier Doch vorher mal ein HttpRequest.Close sofern es so etwas gibt. Ein zweimailiges Open sieht für mich suspekt aus.

MfG

Arnd

Okay danke schon Mal. Laut der Microsoft-Bibliothek gibt es kein solches "close". Was ich jetzt auch weiß: Ist beim zweiten Aufruf eine andere Handynummer drin, dannfunktioniert auch dieser einwandfrei. Zweimal die gleiche Nr. geht nur, wenn ich nach dem ersten Aufruf abbreche und neustarte. Dann wurd gleich beim ersten Aufruf der richtige Errorlevel 150 angezeigt.
 
Kann mir keiner weiterhelfen? Ich hab jetzt noch folgendes probiert: Im ersten Aufruf steht z.B. die 0160123456 drin und im zweiten Aufruf die 0049160123456, was im Endeffekt dieselbe Nummer ist. Der Unterschied ist nur, dass es hier klappt.
Weiter habe ich noch versucht, unterschiedliche Texte an die gleich geschriebene Nummer zu schicken. Das klappt auch.
Außerdem geht es auch, gleiche Texte an die gleiche Nummer mit unterschiedlichem SMS-Typ zu schicken.

Fakt ist also: Es kann nicht in einem Programmaufruf zweimal ein http-Request mit der (exakt) gleichen URL-Zeile ausgeführt werden.

Warum?
 
Hallo allerseits,

nach langer Suche nach einer Lösung für mein Problem bin ich auf folgendes gestoßen: http://msdn2.microsoft.com/en-us/library/system.net.cache.httprequestcachelevel.aspx Damit müsste man sozusagen den Cache für den http-request ausschalten können, was höchstwahrscheinlich mein Problem behebt. Nun habe ich aber leider keine Ahnung, ob und wie ich das in mein VBS-Skript einbauen kann. Kann mit wer von euch weiterhelfen?

Grüße
Christoph
 

Ähnliche Themen

Zurück
Oben