抓取的网页返回404错误,急啊!!

jiangfeng999 2010-05-26 11:06:44
我用IOCP写了一个抓取的程序,可是碰到有跳转(本来应该返回代码302)的页面都返回404错误.
大家有遇到过这样的问题吗,程序比较多,不方便贴出。如果需要那段代码时我在具体贴出吧
...全文
273 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiangfeng999 2010-05-28
  • 打赏
  • 举报
回复
奇怪的是我如果换了一个网络环境,新的网络环境有代理服务器,返回就正确了。真是奇怪。
对方的响应头如下

HTTP/1.0 302 Moved Temporarily
Date: Fri, 28 May 2010 01:26:15 GMT
Server: Apache/2.2.8 (Unix) PHP/5.2.5
X-Powered-By: PHP/5.2.5
Location: http://companyadc.51job.com/companyads/2010/cs/sanyi0520_7115/index.htm
Content-Type: text/html
X-Cache: MISS from XXXXXXXX
X-Cache-Lookup: MISS from XXXXXX:7777
Via: 1.1 XXXXXXXXXXX(squid/2.7.STABLE6)
Connection: close

zhouyongku 2010-05-27
  • 打赏
  • 举报
回复
404错误,网址不正确
tufaqing 2010-05-27
  • 打赏
  • 举报
回复
HEAD 改成 GET
GET /[path] HTTP/1.1\r\n
对于网址http://www.ac.51job.com,path="";
对于网址http://www.ac.51job.com/a/b.html,path="a/b.html";
jiangfeng999 2010-05-27
  • 打赏
  • 举报
回复
我把这个url放到IE的地址栏里面,有页面打开,可url的地址被重定向了。按理说返回的应该是302状态。

lpServerSession->m_sockServer = socket(AF_INET,SOCK_STREAM,0);
if(INVALID_SOCKET==lpServerSession->m_sockServer)
{
dwSysErrorCode = GetLastError();
_THROW_EXCEPTION(E_CREATE_SOCK_ERROR,GetWin32ErrorInfo(dwSysErrorCode));
}

memcpy(&(lpServerSession->m_addrServer),&(pWebHostInfo->m_SockAddress),sizeof(sockaddr_in));
if(connect(lpServerSession->m_sockServer,(sockaddr *)&(lpServerSession->m_addrServer),sizeof(sockaddr_in))==SOCKET_ERROR)
{
dwSysErrorCode = GetLastError();
_THROW_EXCEPTION(E_HTTP_CONN_ERROR,pWebHostInfo->m_strHostName,
dwSysErrorCode,GetWin32ErrorInfo(dwSysErrorCode));
}
ZeroMemory(strRequest,sizeof(strRequest));
sprintf_s(strRequest,HTTP_RESPONE_HEADER_SIZE,
"HEAD %s %s\r\nAccept:*/*\r\nAccept-Language:zh-cn\r\n"\
"User-Agent:Mozilla/4.0 (compatible;MSIE 7.0;Windows XP; .NET CLR 1.1.4322; .NET CLR 2.0.50727)\r\n"\
"Host:%s\r\n"\
"Connection: close\r\n\r\n",szRequestUrl.c_str(),HTTP_VERSION,"ac.51job.com");
send(lpServerSession->m_sockServer,strRequest,strlen(strRequest),0);
char strHttpRespones[1024];
ZeroMemory(strHttpRespones,1024);

struct timeval timeout;
timeout.tv_sec = 60;
fd_set fdReads;
while(1)
{
FD_ZERO(&fdReads);
FD_SET(lpServerSession->m_sockServer,&fdReads);
select(lpServerSession->m_sockServer+1,&fdReads,NULL,NULL,&timeout);
if(FD_ISSET(lpServerSession->m_sockServer,&fdReads))
{
memset(strHttpRespones,0,sizeof(strHttpRespones));

recv(lpServerSession->m_sockServer,strHttpRespones,HTTP_RESPONE_HEADER_SIZE-1,0);

strHttpRespones[HTTP_RESPONE_HEADER_SIZE] = 0;
break;
}
}

这段代码放在一个线程函数中
Eleven 2010-05-27
  • 打赏
  • 举报
回复
404??
服务器找不到指定的页面???
hhf 2010-05-27
  • 打赏
  • 举报
回复
没有找到你要的page,查看url正确否。。。
奔跑前行 2010-05-27
  • 打赏
  • 举报
回复
请求的url有问题吧、、、、
jiangfeng999 2010-05-27
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 tufaqing 的回复:]
HEAD 改成 GET
GET /[path] HTTP/1.1\r\n
对于网址http://www.ac.51job.com,path="";
对于网址http://www.ac.51job.com/a/b.html,path="a/b.html";
[/Quote]

用HEAD我是想先取它的http响应头,根据响应头的状态再做下一步的操作

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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