webForumDet fria alternativet

öppna sida

5 svar · 284 visningar · startad av benken

benkenMedlem sedan feb. 2003250 inlägg
#1

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.

Alpha IIMedlem sedan maj 20002 993 inlägg
nikoMedlem sedan juni 20022 599 inlägg
#3

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.

benkenMedlem sedan feb. 2003250 inlägg
#4

ok

benkenMedlem sedan feb. 2003250 inlägg
#5

Det funka inte, fick 7 fel. Åså funkar detj u inte för linux...

nikoMedlem sedan juni 20022 599 inlägg
#6

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?

137 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)