1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
|
#include <stdio.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <netdb.h>
#include <string.h>
int create_tcp_socket();
#define PORT 80
int create_tcp_socket(){
int sock;
if((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0){
printf("Can't create TCP socket");
exit(1);
}
return sock;
}
int main(int argc, char **argv){
int sock;
long hostadr;
struct sockaddr_in servweb;
struct hostent *hent;
char servname[100];
char fname[50];
char line[512];
char msgsoap[1000];
char requet[2000];
char buffer[2000];
char *post = "POST /cgi/websvcbible.cgi HTTP/1.1\r\n Host: %s\r\n Content-Type: text/xml; charset=iso-8859-1 \r\n Content-Length: %d\r\n SOAPAction: 'http://www.stgregorioschurchdc.org/Bible#read_bible'\r\n\r\n";
//char *url="";
//char *soaction ="\"urn:Roman-IRoman#IntToRoman\"";
FILE *fc;
if(argc == 1){
printf("USAGE: programme arg1(nom serveur) arg2(message Soap)\n");
exit(1);
}
strcpy(servname,argv[1]);
strcpy(fname,argv[2]);
bzero(&servweb,sizeof(servweb));//initialisation du sockaddr
//convertir host to ip
hostadr = inet_addr(servname); //convertit l'adresse ip (n1.n2.n3.n4) en entier, renvoie 0 sinon)
if ((long)hostadr != (long)-1) //on a alors une adresse ip
{
bcopy(&hostadr,&servweb.sin_addr,sizeof(hostadr));
}
else //on a un nom DNS
{
hent = gethostbyname(servname);
if (hent == NULL ){
printf("gethostbyname\n");
exit(1);
}
else {
bcopy(hent->h_addr,&servweb.sin_addr,hent->h_length);
}
}
servweb.sin_port = htons(PORT); //iniatilisation du port a 80
servweb.sin_family = AF_INET; // internet
sock = create_tcp_socket();//creation de la socket tcp
//Connexion
if( connect(sock,(struct sockaddr *)&servweb, sizeof(struct sockaddr)) < 0){
printf("probleme de connexion");
exit(1);
}
else{
printf("Connexion à %s sur le port %d\n", inet_ntoa(servweb.sin_addr), htons(servweb.sin_port));
}
//construction du message SOAP a envoyer
fc = fopen(fname,"r");
if(fc == NULL) {
printf("Impossible d'ouvrir le fichier\n");
exit(1);
}
while(fgets(line,512,fc) != NULL){
strncat(msgsoap,line,strlen(line));
}
// printf("%s\n taille=%d\n",msgsoap,strlen(msgsoap));
sprintf(requet,post,argv[1],strlen(msgsoap));
strcat(requet,msgsoap);
printf("Requete:\n<<START>>\n%s<<END>>\n",requet);
//envoi du message
if(send(sock,requet,strlen(requet)+1,0) == -1){
printf("Echec d'envoie de la requete\n");
exit(1);
}
while (recv(sock,buffer,1500,0) >0){
printf("Reponse du serveur:\r\n %s",buffer);
}
close(sock);
fclose(fc);
return 0 ;
} |
Partager