Avatar billede net-base.dk Nybegynder
30. marts 2004 - 11:02 Der er 8 kommentarer og
1 løsning

Problem med at hente billed fra http

Hej...

Jeg er ved at lavet et Moviedatabase program, i dette program skal man kunne se et billed af den film som man søger. dette billed skal kunne hentes fra www.imdb.com så man ikke skal gemme billederne af sine film på sin harddisk.

Jeg laver programmet i Borland C++ Builder 6.

Er der nogle der ved hvordan dette gøres?

Stil eventuelt flere spg hvis du er i tvivl om gvad jeg mener.
Avatar billede arne_v Ekspert
30. marts 2004 - 11:11 #1
Du åbner en socket til port 80 og sender en HTTP request.

Her er et lille standalone eksempel:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

#include <windows.h>
#include <errno.h>

void get(char *hostname,int port,char *path,char *fnm)
{
  FILE *fp;
  int sd,status,len,tmp;
  char cmd[512],resp[51200],*p,seg[1024];
  struct sockaddr local,remote;
  struct hostent *hostinfo;
  time_t t;
  /* create socket */
  sd=socket(AF_INET,SOCK_STREAM,0);
  if(sd<0) {
      printf("Error creating socket: %s\n",strerror(errno));
      goto fin;
  }
  /* bind socket */
  local.sa_family=AF_INET;
  memset(local.sa_data,0,sizeof(local.sa_data));
  status=bind(sd,&local,sizeof(local));
  if(status<0) {
      printf("Error binding socket: %s\n",strerror(errno));
      goto fin;
  }
  /* lookup host */
  hostinfo=gethostbyname(hostname);
  if(!hostinfo) {
      printf("Error looking up host: %s\n",hostname);
      goto fin;
  }
  /* connect to host */
  remote.sa_family=hostinfo->h_addrtype;
  memcpy(remote.sa_data+2,hostinfo->h_addr_list[0],hostinfo->h_length);
  *((short *)remote.sa_data)=port;
  tmp=remote.sa_data[0];
  remote.sa_data[0]=remote.sa_data[1];
  remote.sa_data[1]=tmp;
  status=connect(sd,&remote,sizeof(remote));
  if(status!=0) {
      printf("Error connecting to host: %s port: %d\n",hostname,port);
      goto fin;
  }
  /* send GET request */
  sprintf(cmd,"GET %s HTTP/1.1\r\nHost: %s\r\n\r\n",path,hostname);
  status=send(sd,cmd,strlen(cmd),0);
  if(status<0) {
      printf("Error sending POST request\n");
      goto fin;
  }
  /* read response */
  fp = fopen(fnm,"wb");
  len=recv(sd,resp,sizeof(resp),0);
  p = strstr(resp,"\r\n\r\n") + 4;
  fwrite(p,1,len-(p-resp),fp);
  while ((len=recv(sd,resp,sizeof(resp),0))>0) {
      fwrite(resp,1,len,fp);
  }
  fclose(fp);
fin:
  closesocket(sd);
  return;
}

int main(int argc,char *argv[])
{
  WSADATA WSAData;
  WSAStartup(0x0101,&WSAData);
  get("www.domain.dk",80,"/dir/billede.jpg","billede.jpg");
  WSACleanup();
  return 0;
}
Avatar billede net-base.dk Nybegynder
30. marts 2004 - 11:17 #2
Nu er det så lige at jeg spørger, om dette kan bruges til windows baseret programmering, da jeg kan se at nogle af dem er til dos baseret programmering. Man kan heller ikke burge commandoen printf i Borland C++ Builder 6.
Avatar billede net-base.dk Nybegynder
30. marts 2004 - 11:19 #3
Fuck. det var da noget være sludder.

Kan man bruge dette kode til windows baseret kode? da jeg kan se at nogle af linjerne er til dos baseret programmering. Funktionen "printf" virker heller ikke i Borland C++ Builder 6.
Avatar billede arne_v Ekspert
30. marts 2004 - 11:21 #4
printf virker udmærket i C++ Builder.

Men det er en console mode applikation.

Hvis din applikation er en GUI applikation skal du naturligvis have
erstattet de printf med noget andet (MessageBox måske ?).
Avatar billede net-base.dk Nybegynder
30. marts 2004 - 11:33 #5
Okay, jeg er lost.

Jeg er ikke så sej til C++ endnu, så er ikke helt med på hvordan man skal gøre det. Men kan man ikke bruge nogle componenter. For så tror jeg godt at jeg muligvis godt kan finde udaf det. har prøvet med det component der hedder "Image" men det kan ikke finde udaf og hente et billed fra en hjemmeside.
Avatar billede arne_v Ekspert
30. marts 2004 - 22:39 #6
Desværre - jeg kan ikke finde ud af drop and drag komponent halløjsa - jeg
foretrækker at programmere det fra bunden af.
Avatar billede net-base.dk Nybegynder
08. april 2004 - 13:14 #7
Nå det er der hvist ikke nogle der kan jeg hjælpe mig med, desvære..

Lukker
Avatar billede arne_v Ekspert
08. april 2004 - 13:22 #8
Du fik en løsning der virker. Den ville du ikke bruge. Det er nok lidt
urealistisk at tro, at nogen ville bruge tid på at lave en alternativ løsning
(selvom sådanne eksisterer). Fordi hvad garanti har de for at du vil bruge
den.
Avatar billede titad Nybegynder
02. juli 2004 - 09:17 #9
hi hi ler lidt højt her inde af net-base.dk og tænker LOL han programere i ASP og svare på mig spg inde i PHP enddag i html *GG*
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester