Automatische Serveraufrufe vom eigenen Computer

hi

Ich möchte eine Programm programmieren, mit dem ich Webseiten Aufrufen kann und dieser GET, bzw. POST Informationen zukommen lassen. Also das Programm läuft dann auf meinem Computer und ruft zum Beispiel jede halbe Stunde eine bestimmte Seite auf.

Nur hab ich selbst keine Ahnung wie man sowas am besten realisiert und in welcher Sprache (kann selber nur PHP). Bin auch gerne bereit mich etwas in eine neue Sprache hineinzuarbeiten. Aber ich nehme mal an, dass das ganze nicht so schwer sein kann…

Also wenn jemand hier Erfahrung hat bitte posten :slight_smile:

mfg

Programmieren kannst du das in eig. jeder Sprache. Wenn du nur ein kleines Programm ohne GUI brauchst, kannst du das schnell in C erledigen. Mit GUI ist es wohl in Java, VB, C# oder was auch immer leichter :wink:

Wenn du Linux hast, kannst du für den regelmäßigen Aufruf eines Scriptes/Programms ganz leicht den cron nutzen.
Aufrufen kannst du auch PHP Scripte, wenn es nur jede halbe Stunde aufgerufen werden soll, ist es denke ich nicht so schlimm, für sowas PHP zu nutzen.
Einige Linux Distris (Debian z.B.) haben auch Python installiert, welches man für sowas ganz gut nutzen kann.

Um GET bzw POST Daten ohne irgendwelche gesonderten cURL Libs oder so an einen Webserver zu senden, musst du dich mit dem HTTP auseinander setzen.

Ja, ich hab ubuntu :slight_smile:

Soweit ich das verstanden habe, ist Cron nur für das Aufrufen des Scripts/Programms zuständig, also das Script/Programm, welches die Seite aufruft, muss ich dann immer noch machen.
Wenn es nicht viel Unterscheid macht, würde ich das ganze lieber mit C als mit Python machen…

Den HTTP-wiki-Artikel hab ich mir soweit einmal durchgelesen…

Hier hast du alles über Sockets in C:
pc-adviser.de/socket_programmierung.html

Beispiel:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
	int s;
	struct sockaddr_in srv;
	
	s = socket(AF_INET, SOCK_STREAM, 0);

	if (s == -1)
	{
		perror("socket failed");
		return 1;
	}
	
	srv.sin_addr.s_addr = inet_addr("user.bplaced.net");
	srv.sin_port = htons( (unsigned short int) atol(80));
	srv.sin_family = AF_INET;
	
	if (connect(s, &srv, sizeof(srv)) == -1)
	{
		perror("connect failed");
		return 1;
	}
	
	char buffer[200] = "GET /requst.php?a=1 HTTP/1.1 \r\nHost: user.bplaced.net\r\n\r\n";

	if(send(s, buffer, strlen(buffer), 0) == -1)
	{
		perror("send failed");
		return 1;
	}
	
	if(recv(s, buffer, sizeof(buffer) - 1, 0) == -1)
	{
		perror("recv failed");
		return 1;
	}
	
	if(strstr(buffer, "HTTP/1.0 200 OK") != buffer)
	{
		perror("server did not return code 200");
		return 1;
	}
	
	close(s);
	
	return 0;
}

das if(strstr(buffer, “HTTP/1.0 200 OK”) != buffer) ist ungetestet, der rest sollte funktionieren :wink:

Naja, das trifft nun so gar nicht zu :smiley:
Kannst du mir noch ein tutorial empfehlen, wo man die Grundlagen zu C lernt? :slight_smile:

von deinem Beispiel versteh ich derzeit leider auch noch garnichts, aber ich werds mir aufheben!

ist aber ziemlich PHP-ähnlich :ps:

gidf.de/C-Tutorial

Danke, darauf wär ich selbst auch gekommen. Nur die Hits von google sind teilweise sehr dubios o.0

physics.drexel.edu/students/ … /C_basics/
Das sieht doch gut aus?? :wink:

Scheitere gerade beim compilen :smoke:

Habe die Datei hello_world.c:

[code]#include <stdio.h>

void main()
{
printf("\nHello World\n");
}[/code]
Die muss man doch jetzt nur noch im Terminal so compilen:

gcc hello_world.c

das ergibt jedoch:

andreas@andreas-laptop:~/c$ gcc hello_world.c hello_world.c:1:20: error: stdio.h: No such file or directory hello_world.c: In Funktion »main«: hello_world.c:5: Warnung: Unverträgliche implizite Deklaration der eingebauten Funktion »printf« hello_world.c:4: Warnung: Rückgabetyp von »main« ist nicht »int«
Was mache ich da falsch? :winke:

—edit—
so mittlerweile kommt nur noch ein

andreas@andreas-laptop:~/c$ gcc hello_world.c hello_world.c: In Funktion »main«: hello_world.c:4: Warnung: Rückgabetyp von »main« ist nicht »int«
Wo ich auch noch nicht ganz durchblicke ist, wie kann ich diese Datei jetzt aufrufen?

void main() gibts nicht, das muss ein int main(9 sein

lg Michi

Hier steht doch bei physics.drexel.edu/students/ … ics/#first genau so:

[code]#include < stdio.h>

void main()
{
printf("\nHello World\n");
}
[/code]

Ich habs jetzt trotzdem mit int main() gemacht und er compiliert jetzt ohne Warnungen.
Aber wenn ich a.out aufrufe passiert gar nichts.

Oh, hab ich übersehen…doch ein schlechtes Tut :ps:

Das sieht (bis auf die Structs) besser aus:
roboternetz.de/wissen/index.php/C-Tutorial

void bedeutet wie in anderen sprachen auch: keine rückgabe

die main ( also hauptfunktion) muss aber ich c und c++ einen wert zurückgeben können, also int

edit: allerdings ist c / c++ wirklich schlecht für sockel geeignet xD
in .NET oder blitzbasic sind das nicht mal 5 zeilen und hioer brauchste sau viele header usw usw

dafür ist das C-Programm portierbar und läuft wesentlich schneller/stabiler. Die 2 Header sind auch kein Problem zum Senden.
Außerdem soll das Programm unter Linux laufen und da ist .NET WIRKLICH ungeeignet.

Die “einfache” Alternative wäre Python, aber das macht auch keinen Unterschied mehr

Wenn du dir das Leben einfach machen willst, schreib es in Perl, da ist das ein Zweizeiler:

use LWP::Simple; get 'http://foobar.bplaced.net/';
Du könntest natürlich auch einfach wget oder curl aufrufen, aber das ist anscheinend zu einfach. :unamused:

ich würde ja die php lösung mit curl für das beste halten :ps:

Kann man mit dem ubuntu cron einfach ein php skript aufrufen?
Dass wär dann natürlich schon einfacher :smiley:

natürlich :slight_smile:

tuts gibts sicher ne menge bei google :slight_smile:

einfach paket php-cgi installieren, dann kannst du einen Cron auf zB

erstellen. Wenn es sich aber um so etwas einfaches handelt und es auch nichts mit aktuellen PC-Parametern zu tun hat, kann man das auch hier realisieren: cronjob.de/