获取网页编码问题和防止出现999错误

huyidao21 2007-12-31 01:43:48
需要采集的是http://cn.biz.yahoo.com/iframe2/shl/zjlx/xarchives/600396.html
不过我试过了很多编码,都是乱码,有高手帮忙看看?始终没有发现他到底使用的什么编码
模拟访问,不过采集多了会出现999错误,被封掉IP。有好的解决办法吗?除了使用代理。
...全文
238 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
huyidao21 2008-01-04
  • 打赏
  • 举报
回复
看不怎么懂楼上的代码。偶都用C#。还是结贴吧,谢谢楼上的。
chehw 2008-01-03
  • 打赏
  • 举报
回复


int CMainWindow::NavigateTo(LPCTSTR lpszUrl)
{
DWORD dwSize=0;
DWORD dwRead;
DWORD dwTotalRead=0;
HINTERNET hSession=NULL,
hConnect=NULL,
hRequest=NULL;
BOOL rc=FALSE;
LPSTR buffer;
LPWSTR wszText=NULL;

TCHAR szDomain[MAX_PATH]=TEXT("");
TCHAR szVirPath[1024]=TEXT("");

TCHAR * pCursor=(TCHAR *)_tcschr(lpszUrl, TEXT('/'));
if(NULL!=pCursor)
{
lstrcpyn(szDomain, lpszUrl, pCursor-lpszUrl+1);
lstrcpy(szVirPath, pCursor+1);
}else
lstrcpyn(szDomain, lpszUrl, MAX_PATH);

hSession=WinHttpOpen(L"WinHttpTest - NavigateTo", WINHTTP_ACCESS_TYPE_NO_PROXY, WINHTTP_NO_PROXY_NAME, WINHTTP_NO_PROXY_BYPASS,0);
if(NULL==hSession) goto Label_Exit;

hConnect=WinHttpConnect(hSession, szDomain, INTERNET_DEFAULT_PORT, 0);
if(NULL==hConnect) goto Label_Exit;

hRequest=WinHttpOpenRequest(hConnect, L"GET", szVirPath, NULL, WINHTTP_NO_REFERER , WINHTTP_DEFAULT_ACCEPT_TYPES, 0);
if(NULL==hRequest) goto Label_Exit;

rc=WinHttpSendRequest(hRequest, WINHTTP_NO_ADDITIONAL_HEADERS, 0, WINHTTP_NO_REQUEST_DATA, 0, 0, 0);
if(!rc) goto Label_Exit;

rc=WinHttpReceiveResponse(hRequest, 0);
if(!rc) goto Label_Exit;

HANDLE hFile=INVALID_HANDLE_VALUE;


int fUnicode=-1;
UINT uCodePage=CP_ACP;

DWORD dwBufferSize=16384;
buffer=(LPSTR)LocalAlloc(LPTR, dwBufferSize);
WinHttpQueryHeaders(hRequest, WINHTTP_QUERY_CONTENT_TYPE, WINHTTP_HEADER_NAME_BY_INDEX,
buffer, &dwBufferSize, WINHTTP_NO_HEADER_INDEX);

SetWindowText(m_hEdit, (LPCWSTR)buffer);

_tcsupr((wchar_t *)buffer);
pCursor=(TCHAR *)_tcsstr((wchar_t *)buffer, TEXT("CHARSET="));
if(NULL!=pCursor)
{
pCursor+=8;
if(lstrcmp(pCursor, TEXT("UTF-8"))==0) uCodePage=CP_UTF8;
}

LocalFree(buffer);
// TCHAR szFileName[MAX_PATH]=TEXT("..\\files\\");

// wsprintf(szFileName, TEXT("..\\files\\%s_%s.html"), szDomain, szVirPath);

// hFile=CreateFile(szFileName, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ, NULL,
// CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
// if(INVALID_HANDLE_VALUE==hFile) goto Label_Exit;
// WriteFile(hFile, buffer, dwBufferSize, &dwBufferSize, NULL);


do
{
dwSize=0;
dwRead=0;
rc=WinHttpQueryDataAvailable(hRequest, &dwSize);
if(rc)
{
buffer=(LPSTR)LocalAlloc(LPTR, sizeof(CHAR)*(dwSize+1));

rc=WinHttpReadData(hRequest, (LPVOID)buffer, dwSize, &dwRead);

if(rc)
{

{
wszText=(LPWSTR)LocalAlloc(LPTR, sizeof(WCHAR)*(dwSize+100));
MultiByteToWideChar(uCodePage, 0, buffer, dwRead, wszText, dwSize+100);
SendMessage(m_hEdit, EM_REPLACESEL, -1, (LPARAM)wszText);
LocalFree(wszText);
}

// SendMessage(m_hEdit, EM_SETTEXTEX, (WPARAM)&ste, (LPARAM)buffer);
if(INVALID_HANDLE_VALUE!=hFile)
WriteFile(hFile, buffer, dwRead, &dwRead, NULL);
// SetDlgItemTextA(m_hWnd, 1000, buffer);
}
LocalFree(buffer);
}
dwTotalRead+=dwRead;
}while(dwSize>0);

CloseHandle(hFile);
Label_Exit:
if(NULL!=hRequest)
{
WinHttpCloseHandle(hRequest);
}
if(NULL!=hConnect)
{

WinHttpCloseHandle(hConnect);
}
if(NULL!=hSession)
{
WinHttpCloseHandle(hSession);
}

return rc;
}
huyidao21 2008-01-02
  • 打赏
  • 举报
回复
to chehw:
我也曾经试过GBK的,一样是乱码啊。能否SHOW一下你的代码?
bat800 2008-01-01
  • 打赏
  • 举报
回复
友情帮你顶一下!没有做过。
wsj1983920 2008-01-01
  • 打赏
  • 举报
回复
支持一下!!!!!!!
chehw 2008-01-01
  • 打赏
  • 举报
回复
解码结果:

<link href=../css-hq.css rel=stylesheet type=text/css>
<table class=12text cellSpacing=1 cellPadding=2 width=100% bgColor=#79b0e6 border=0><tr bgColor=#e5f2ff><td width=24%> </TD><td width=19% align=center>今日</TD><td width=19% align=center>5日</TD><td width=19% align=center>10日</TD><td width=19% align=center>20日</TD></TR><tr bgcolor=#ffffff><td>机构资金进出(万元)</td><td><font color=red>↑91.70</font></td><td><font color=red>↑1867.32</font></td><td><font color=red>↑9189.13</font></td><td><font color=red>↑29723.11</font></td></tr><tr bgcolor=#ffffff><td>资金进出(万元)</td><td><font color=green>↓-1265.44</font></td><td><font color=green>↓-5019.13</font></td><td><font color=green>↓-1877.42</font></td><td><font color=red>↑13660.59</font></td></tr><tr bgcolor=#ffffff><td>机构交易成本(元)</td><td>19.94</td><td>20.10</td><td>19.73</td><td>18.67</td></tr><tr bgcolor=#ffffff><td>机构交易额(万元)</td><td>1741.05</td><td>18006.71</td><td>44487.55</td><td>105532.90</td></tr><tr bgcolor=#ffffff><td>散户交易额(万元)</td><td>7295.79</td><td>42098.52</td><td>91521.27</td><td>164404.10</td></tr><tr bgcolor=#ffffff><td>散户资金进出(万元)</td><td><font color=green>↓-1357.14</font></td><td><font color=green>↓-6886.45</font></td><td><font color=green>↓-11066.54</font></td><td><font color=green>↓-16062.52</font></td></tr><tr bgcolor=#ffffff><td>机构、散户资金比</td><td>1:4.19</td><td>1:2.34</td><td>1:2.06</td><td>1:1.56</td></tr><tr bgcolor=#ffffff><td>机构换手率(%)</td><td>0.35</td><td>3.61</td><td>9.09</td><td>22.80</td></tr><tr bgcolor=#ffffff><td>总换手率(%)</td><td>1.83</td><td>12.06</td><td>27.77</td><td>58.09</td></tr></TABLE><!-- w5.biz.cnb.yahoo.com uncompressed/chunked Tue Jan 1 20:36:47 CST 2008 -->
chehw 2008-01-01
  • 打赏
  • 举报
回复
text/html; charset=GBK
用的是GBK
huyidao21 2008-01-01
  • 打赏
  • 举报
回复
一天了,还没有高手可以指点一下吗?

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧