看了破船兄的文章【原创】好听音乐网 -- 歌曲下载分析流程及程序的编写,我也来写一个。破船的代码是智慧型的,我来个猛士型的。。
打开好听音乐网的首页,随便点一首歌来听,出现了播放界面,同时音乐也出来了,这时查看源文件,容易发现如下关键代码
代码:
if("undefined"==typeof(UUAuthCode)|| UUAuthCode==null) UUAuthCode=""; else UUAuthCode="?"+UUAuthCode; urlht = "/21z/0/daodaidq090508/1/8f4257328b24c8d0_5.wma"+UUAuthCode; } seto(); var url='http://wma.haoting.com'; document.writeln("<object id=\"mPlayer\" width=365 height=62"); document.writeln(" classid=\"CLSID:6BF52A52-394A-11D3-B153-00C04F79FAA6\" type=application\/x-oleobject standby=\"Loading Windows Media Player "); document.writeln(""); document.writeln("components...\">"); document.writeln(" <param name=\"URL\" value='"+url+""+urlht+"'>");

代码:
#include <windows.h> #include <UrlMon.h> #pragma comment (lib, "URLmon.lib") WCHAR wcURL[2048]; WCHAR wcFileName[2048]; char szBuffer[256]; char szFullPath[512]; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) { memset(szFullPath, 0, sizeof(char) * 512); memset(szBuffer, 0, sizeof(char) * 256); memset(wcFileName, 0, sizeof(WCHAR) * 2048); memset(wcURL, 0, sizeof(WCHAR) * 2048); lstrcpyA(szFullPath, "http://wma.haoting.com"); //好听音乐网的音乐服务器网址,域名是固定的 lstrcpy(wcFileName, TEXT("C:\\Test.txt")); //临时保存的文件,会在文件关闭后自动被删除 lstrcpy(wcURL, TEXT("http://www.haoting.com/htmusic/349809ht.htm")); //示例网址 if (S_OK == URLDownloadToFile(NULL, wcURL, wcFileName, 0, NULL)) { HANDLE hFile = CreateFile(wcFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_DELETE_ON_CLOSE, NULL); if (INVALID_HANDLE_VALUE == hFile) { hFile = NULL; return 0; } LARGE_INTEGER FileSize = {0}; GetFileSizeEx(hFile, &FileSize); HANDLE hMemFile = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 0, NULL); if (INVALID_HANDLE_VALUE == hMemFile) { hMemFile = NULL; return 0; } LPBYTE lpByte = (LPBYTE)MapViewOfFile(hMemFile, FILE_MAP_READ, 0, 0, 0); for (UINT i = 0; i < FileSize.u.LowPart; i++) { if ((*lpByte == '/') && (*(lpByte + 1) == '2') && (*(lpByte + 2) == '1') && (*(lpByte + 3) == 'z') && (*(lpByte + 4) == '/')) { for (int j = 0;; j++) { szBuffer[j] = *lpByte; if ((*lpByte == 'a') && (*(lpByte - 1) == 'm') && (*(lpByte - 2) == 'w') && (*(lpByte - 3) == '.')) { break; } lpByte += 1; } break; } lpByte += 1; } UnmapViewOfFile((LPVOID)lpByte); CloseHandle(hMemFile); CloseHandle(hFile); lstrcatA(szFullPath, szBuffer); MessageBoxA(NULL, szFullPath, NULL, MB_OK); //测试是否弹出了我们想要的下载地址 ^_^ ~~ } return 0; }
有了这个查找引擎,做个GUI来实现批量下载还难吗

PS:这个服务器都是提供WMA格式的,价值不大,我的方法也很挫,但是所想即所得

附件中是一个编译好的示例,演示用的。