-
HTTP Request senden
Hallo *ALL,
ich habe folgende Aufgabe: Absetzen eines HTTP Requests von der iSeries und Empfangen der Antwort. Sollte eigentlich eine leichte Aufgabe sein. (Eine Art Webservice light)
Mit Java funktioniert das ohne weitere Probleme (eingebunden per JNI in ILE PRG), jedoch ist die Laufzeit inakzeptabel.
Da habe ich mich nach einer anderen Lösung umgeschaut und bin auf zwei Lösungsansätze gekommen:
- Die HTTPAPI von Scott Klement
- Einen HTTPClient in C
- SRVPGM iSockets von Bob Cozzi
Alle drei Lösungen benutzen auf der iSeries die gleichen C Funktionen um ein Socket aufzubauen und den Request zu senden.
Der C-Client ist auf einem Windows PC lauffähig (erfolgreich getestet), auf der iSeries bekomme ich jedoch bei allen drei Lösungen jeweils keine Antwort vom Webserver, bis die Connections auf einen Timeout laufen. Lt. Netstat werden die Bytes gesendet, aber keine Empfangen. Im Aufrufstapel ist ersichtlich, dass das Programm dann jeweils auf recv steht.
Sind evtl. TCPIP Einstellungen auf unserer iSeries falsch? Hat dort schon jemand ähnliche Erfahrungen gemacht, oder hat sogar vielleicht eine einfache andere Lösung?
Hier ist z.B. der C-Source:
PHP-Code:
#include <stdio.h> #include <errno.h>
#ifdef _WIN32 /* Headerfiles für Windows */ #include <winsock.h> #include <io.h> #else /* Headerfiles für Unix/Linux */ #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> #define closesocket(s) close(s) #endif
/* Definitionen */ #define HTTP_PORT 80 #define HOST "99.33.137.29" #define URL "/ERPDocumentMaster.do?part=K.04753.370.00.00"
/*==============*/ /* MAIN */ /*==============*/ int main( int argc, char **argv){ struct sockaddr_in server; struct hostent *host_info; unsigned long addr; int sock; char buffer[1024]; int count, bytes_sent;
/* Anpassung für Windows */ #ifdef _WIN32 short wVersionRequested; WSADATA wsaData; wVersionRequested = MAKEWORD (1, 1); if (WSAStartup (wVersionRequested, &wsaData) != 0) { fprintf( stderr, "Failed to init windows sockets\n"); exit(1); } #endif
/* Socket erstellen */ sock = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP); if (sock < 0) { perror( "failed to create socket"); exit(1); }
/* Server Verbindung definieren (Typ, IP Adresse und Portnummer) */ memset( &server, 0, sizeof (server));
server.sin_family = AF_INET; server.sin_port = htons (HTTP_PORT); server.sin_addr.s_addr = inet_addr (HOST);
/* Hostnamen auflösen */ if (server.sin_addr.s_addr == INADDR_NONE) {
host_info = gethostbyname (HOST); if (host_info == NULL) { fprintf( stderr, "unknown server: %s\n", HOST); exit(1); } memcpy((char*) &server.sin_addr.s_addr, host_info->h_addr, host_info->h_length); }
/* Zum Server verbinden */ if ( connect( sock, (struct sockaddr*)&server, sizeof( server)) < 0) { perror( "can't connect to server"); exit(1); }
/* HTTP Request senden */ sprintf( buffer,"GET %s HTTP/1.0\r\n\r\n",URL); fprintf(stderr, buffer); bytes_sent = send( sock, buffer, strlen( buffer), 0); fprintf(stderr, "Bytes gesendet: %i", bytes_sent);
/* Antwort des Servers ausgeben */ if (bytes_sent > 0) { while ((count = recv (sock, buffer, sizeof(buffer), 0)) > 0) { write( 1, buffer, count); } }
/* Socket schließen */ closesocket( sock); return count; }
Similar Threads
-
By Weki in forum IBM i Hauptforum
Antworten: 4
Letzter Beitrag: 11-09-06, 13:31
-
By fischers in forum IBM i Hauptforum
Antworten: 13
Letzter Beitrag: 12-06-06, 08:57
-
By troepen in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 10-05-06, 21:59
-
By Techniker in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 26-04-06, 15:20
-
By Koelch400 in forum IBM i Hauptforum
Antworten: 17
Letzter Beitrag: 16-01-05, 10:19
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks