Hur ska man göra så ett c/c++ program öppnarn websida? Jag vill bara att en php sida körs. Inte ha den. I vb kan man ju använda inet1.openurl men finns det inte nåt sånt i c++? Ska va i linux med.
öppna sida
5 svar · 284 visningar · startad av benken
/red linux sa du... detta var nog windows :OO
Kortast tänkbara "fulkod" för att anropa en PHP-sida:
#include <winsock.h>
int main(int argc, char* argv[])
{
struct sockaddr_in A;
WSADATA W; SOCKET S;
struct hostent *H; char R[1000]; int i ;
WSAStartup (0x101,&W);
S = socket(AF_INET, SOCK_STREAM,0);
A.sin_family=AF_INET;
A.sin_port = htons(80);
H=gethostbyname("www.dindomän.se");
A.sin_addr.s_addr=*((unsigned long *) H->h_addr);
i=connect(S,(struct sockaddr *) &A,sizeof(A));
strcpy(R,"GET /sökväg/dinsida.php \r\nHost: [url]www.dindomän.se\r\n\r\n[/url]");
i=send(S,R,strlen(R),0);
return 0;
}
Du måste referera till WSOCK32.LIB vid länkningen. Koden borde kompilera på Linux också med ett par ändringar.
ok
Det funka inte, fick 7 fel. Åså funkar detj u inte för linux...
7 fel? Du får ursäkta, men min telepatiska förmåga är lite nedsatt idag (pga förkylning). Vad för fel? Kompileringsfel? Länkningsfel? Lade du till WSOCK32.LIB? Project->Settings->Link->Object Library Modules (om du använder VS).
Åså funkar detj u inte för linux...
Nä, jag vet. Som jag skrev så var det Windowskod. Jag trodde du bara efterlyste själva principen.
Så här blir det på Linux (koden är lite längre och snyggare eftersom jag tagit den ur en bok):
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <errno.h>
#include <arpa/inet.h>
#define PROTOCOL "tcp"
#define REQUEST "GET /sökväg/dinsida.php \nHost: [url]www.dindomän.se\n\n[/url]"
int main(int argc, char *argv[]) {
int sockid;
struct servent *serviceaddr;
struct hostent *hostaddr;
struct protoent *protocol;
struct sockaddr_in socketaddr;
char buffer[1024];
int count;
bzero((char *) &socketaddr, sizeof(socketaddr));
socketaddr.sin_family = AF_INET;
serviceaddr = getservbyname("http", PROTOCOL);
socketaddr.sin_port = serviceaddr->s_port;
hostaddr = gethostbyname("www.dindomän.se");
memcpy(&socketaddr.sin_addr, hostaddr->h_addr, hostaddr->h_length);
protocol = getprotobyname(PROTOCOL);
sockid = socket(PF_INET, SOCK_STREAM, protocol->p_proto);
connect(sockid, &socketaddr, sizeof(socketaddr));
write(sockid, REQUEST, strlen(REQUEST));
return 0;
}
Vill du sen ha kod som du kan köra rakt av både på Windows och Linux så kanske Java eller Perl kan vara alternativ?