如何获得类似http://download.pchome.net/php/tdownload2.php?sid=18377&url=/system/patch/srsp1.exe&svr=2&typ=0的最终链接地址?
我用C++Builder开发的,在wininet是否有函数可直接提取,谢谢

解决方案 »

  1.   

    int htconnect(const char *domain,int port)  
    {  
    int white_sock;  
    struct hostent * site;  
    struct sockaddr_in me;   site = gethostbyname(domain);  
    if (site==NULL) return -2;  
        white_sock = socket(AF_INET,SOCK_STREAM,0);  
    if (white_sock<0) return -1;   memset(&me,0,sizeof(struct sockaddr_in));  
    memcpy(&me.sin_addr,site->h_addr_list[0],site->h_length);  
    me.sin_family = AF_INET;  
    me.sin_port = htons(port);   return (connect(white_sock,(struct sockaddr *)&me,sizeof(struct sockaddr))<0) ? -1 : white_sock;  
    }  
    CString GetUrl(char * pHost, int nPort, char * pRes)
    {
    CString s="";
    int n=htconnect(pHost,nPort);
    if(n<=0) return s;
    char buf[1024];
    sprintf(buf,"GET %s HTTP/1.0\nHost: %s\n\n",pRes,pHost)
    send(n,buf,strlen(buf),0);
    int nLen=0;
    nLen=recv(n,buf,1024,0);
    if(nLen<=0) return s;
    char *p;
    if(strstr(buf,"302") && (p=strstr(buf,"Location: ")) ){
    char *p2=strtok(p+strlen("Location: "),"\r\n");
            if(p2) s=p2;
    }
    return s;
    }用 GetUrl("download.pchome.net",80,"/php/tdownload2.php?sid=18377&url=/system/patch/srsp1.exe&svr=2&typ=0")
    这样调用.函数新写的,没调试,你自己调调吧
      

  2.   

    sorry.程序里忘记closesocket(n) 了而且有个小的地方也没有处理.稍改了一下.CString GetUrl(char * pHost, int nPort, char * pRes)
    {
    CString s="";
    int n=htconnect(pHost,nPort);
    if(n<=0) return s;
    char buf[1024];
    sprintf(buf,"GET %s HTTP/1.0\nHost: %s\n\n",pRes,pHost)
    send(n,buf,strlen(buf),0);
    int nLen=0;
    nLen=recv(n,buf,1024,0);
    closesocket(n);
    if(nLen<=0) return s;
    buf[nLen]=0;
    char *p;
    if(strstr(buf,"302") && (p=strstr(buf,"Location: ")) ){
    char *p2=strtok(p+strlen("Location: "),"\r\n");
            if(p2) s=p2;
    }
    return s;
    }
      

  3.   

    没有反应啊,是不是要用socket建立什么连接才行?能写全点吗?谢谢