求解析URL C++代码 如何获得类似http://download.pchome.net/php/tdownload2.php?sid=18377&url=/system/patch/srsp1.exe&svr=2&typ=0的最终链接地址?我用C++Builder开发的,在wininet是否有函数可直接提取,谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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")这样调用.函数新写的,没调试,你自己调调吧 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;} 没有反应啊,是不是要用socket建立什么连接才行?能写全点吗?谢谢 模拟键盘按下问题,卖妻求解!!!!!!!!!!!!!!!!!!!!!!!!! 【公告】南京程序员协会正式成立! 赶快申请加入会员! 一个关于。NET框架的问题! 寻找DirectShow 视频上下翻转 Filter 200分求基于OpenGL可视化三维服装建模的网站或思想,进者有分,解决了另外再加分! 高手帮忙看下curl 运行后内存会不断增加,不知道哪里出问题了 COM Object 如何实现 Clone 关于编译错误的一个问题 vc 6.0中 C和CPP源文件 混合编译 出问题 组态软件iFix自带定时器问题 在某些情况下客户端接受不到udp包,这是为什么? 无法示别资源ID
{
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")
这样调用.函数新写的,没调试,你自己调调吧
{
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;
}