Post网址后,想要提取网页源码。但中间有页面跳转,请问如何提取跳转后的、最终页面源码的问题。困扰多日。求解!

问题描述

Post网址后,想要提取网页源码。但中间有页面跳转,请问如何提取跳转后的、最终页面源码的问题。困扰多日。求解!******************************************************************【我的问题】我想提取校园网的网页源代码。使用如下方式:privatestringPostData(stringpurl,stringstr){try{byte[]data=Encoding.GetEncoding("UTF-8").GetBytes(str);HttpWebRequestreq=(HttpWebRequest)WebRequest.Create(purl);req.Timeout=30000;req.Method="Post";req.ContentType="application/x-www-form-urlencoded";req.ContentLength=data.Length;Streamstream=req.GetRequestStream();stream.Write(data,0,data.Length);stream.Close();HttpWebResponserep=(HttpWebResponse)req.GetResponse();StreamreceiveStream=rep.GetResponseStream();Encodingencode=Encoding.GetEncoding("UTF-8");StreamReaderreadStream=newStreamReader(receiveStream,encode);Char[]read=newChar[256];intcount=readStream.Read(read,0,256);StringBuildersb=newStringBuilder("");while(count>0){Stringreadstr=newString(read,0,count);sb.Append(readstr);count=readStream.Read(read,0,256);}rep.Close();readStream.Close();tx1.Text=t.ToString();returnsb.ToString();}catch(Exceptionex){return"";//ForumExceptions.Log(ex);}}可以正常返回源码信息。但问题是,这个返回的是第一次post数据后的信息,而实际上,我想要得到的结果是跳转N次之后的网页源码。******************************************************************【我的实例】由于校园网的那个中间跳转太多了。这里我们使用Post163网易来做个实验,效果也是比较相像的,但中间页只跳转了2次,比较好分析。我先提供一个已申请的163测试ID,用户名:csdn2013。密码:csdn2013abc。你可以先在http://reg.163.com/UserLogin.shtml入口处登陆一下,点击登陆按钮后,仔细的观察一下IE地址栏,隐约可以看到快速跳转的一个http://youdao.xxx.xxx.com/xxx/xxx的网址,然后会跳转到“网页通行证”页面去了。一、我运行:stringdata=PostData("https://reg.163.com/logins.jsp","username=csdn2013&password=csdn2013abc");这样将返回中间的跳转页的网页源码信息:<title>跳转提示</title>xxxxxx正在登录,请稍等...</p>二、而我最终想要得到的是跳转到登陆成功后的“网页通行证”上的页面信息。从初始post用户名密码,到最终的“网页通行证”页面,这中间我使用winsock抓包得到的数据是跳转了2次,第一次是跳转到youdao.xxx,第二次才是跳转到正常的“网页通行证”上去。【我的寻找】查看了一些资料,也有网友提出这个问题。说是重新定向一下就可以了。好像是使用cookies模拟一下什么的。他写的是delphi的代码,我没有看太懂。如下:----------------------------------------第一部分可能有用的Delphi代码ifURL=''thenexit;FIdSSLIOHandlerSocket:=TIdSSLIOHandlerSocket.Create(nil);FIdSSLIOHandlerSocket.SSLOptions.Method:=sslvSSLv3;FIdHTTP:=TIdHTTP.Create(nil);FIdHTTP.IOHandler:=FIdSSLIOHandlerSocket;FIdHttp.HTTPOptions:=[];FIdHttp.ReadTimeout:=10000;FIdHttp.HandleRedirects:=true;//自动跳转FIdHttp.Request.SetHeaders;FIdHttp.Request.UserAgent:='Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.1;SV1)';FIdHttp.Request.Connection:='Close';FIdHttp.Request.CustomHeaders.Clear;FIdHttp.Request.CustomHeaders.Add('Cookie:'+ACookie);tryresult:=FIdHttp.Post(URL,APostData);exceptonE:ExceptiondoAError:=E.Message;//MovedTemporarilyend;ACookie:=GetCookie(ACookie,FIdHttp.Response.RawHeaders.Text)+ACookie;URL:=FIdHttp.Response.Location;FIdHTTP.Free;FIdSSLIOHandlerSocket.Free;if(AError='HTTP/1.1302MovedTemporarily')or(AError='HTTP/1.1302Found')thenbeginResult:=PostHttp(URL,ACookie,APostData);end;--------------------------------------------------------------------------------第二部分可能有用的Delphi代码beginAPostData.Add('product=163');APostData.Add('type=1');APostData.Add('username='+FUserName);APostData.Add('password='+FPassword);AUrl:='http://reg.163.com/logins.jsp';AResult:=PostHttp(AUrl,ACookie,APostData);ifpos('跳转提示',AResult)>0thenbeginAUrl:=GetReplaceUrl(AResult);//跳转提示ifAUrl<>''thenbeginAResult:=GetHttp(AUrl,ACookie);AUrl:=GetReplaceUrl(AResult);//登录成功,正在跳转ifAUrl<>''thenbeginAResult:=GetHttp(AUrl,ACookie);FCookie:=ACookie;HTMLSource;//这里就得到了跳转后的最终的网页通行证代码end;end;end;----------------------------------------我看他delphi大概的意思,是说先正常post,然后又再次提交了cookies中的内容去重定向了一次,这一句:PostHttp(AUrl,ACookie,APostData);。再然后就得到了最终页面的返回结果。******************************************************************【郁闷】不知道我上面的描述大侠们是不是能理解。。。呵呵。对于没有接触过的朋友可能有点不明白。但对于大侠来说应该是很容易的事情。散分300,赠予热心侠客。求助大侠解决问题。非常感谢!!

解决方案

解决方案二:
江湖救急啊......霍霍....
解决方案三:
你贴的delphi代码,重点都不在这里。应该是返回的httpresponse里面的header里面有一个redirecturl,然后根据那个再获取一次。
解决方案四:
好不容易看完,发现属于没有接触过的朋友
解决方案五:
caozhy朋友,请问能不能指点一下redirecturl这个应该如何获取?
解决方案六:
不是,是我已经获取了,是这个地址:window.location.replace("http://reg.youdao.com/crossdomain.jsp?username=csdn2013&loginCookie=H6p7RH7C51BGlO96ff7I3vAlFL6ZKSFQGFbBGDnl7dxTB2k6ZBVkwemIqYSI78OFgeofsc6OAEvsrETDgVKNYOe127rEwLvOOZdRkhUVXOju6&sInfoCookie=1270274787%7C0%7C3%2640%23%23&pInfoCookie=csdn2013%40163.com%7C1270274787%7C0%7Cother%7C11%266%7Clin%261270269512%26other%23lin%26210200%2310%7C%260&url=http%3A%2F%2Freg.163.com%2FMain.jsp%3Fusername%3Dcsdn2013");//remainforpopo,don'tdel跳转后的,请问我获取了以后,如何redirect?代码里应该如何写呢?
解决方案七:
顶我一下。。。。
解决方案八:
关注中.......
解决方案九:
学习中。。。没有接触过。
解决方案十:
关注一下!
解决方案十一:
期待高手中啊...
解决方案十二:
唉。。。。。。。无解啊。。
解决方案十三:
goodgoodstudy,daydayup
解决方案十四:
高手出现啦!哇哈哈
解决方案十五:
daydayup......
解决方案:
帮顶一下
解决方案:
LZ,给你发到邮箱了。
解决方案:
对于页面跳转的问题,HttpWebRequest可以自己处理,有一个参数设置为True时自己会跳转,名称忘记了,可以去查查MSDN,当然这只是一种情况,就是HTTP中的301或是302跳转。第二种情况是HTML或是Javascript的跳转,这时就需要自己获取源代码中的链接了,然后带上上次访问的COOKIES去访问那个跳转的链接,像是一些登陆的跳转操作,一般都需要COOKIES,不然没有权限。
解决方案:
直接用登陆的cookie去访问要取源码的网址不知道可否
解决方案:
该回复于2011-03-30 16:58:34被版主删除
解决方案:
写得太长了,说明用什么语言得到跳转后的网址就行了。
解决方案:
不知楼主解决了折个问题没?我也遇到了相同的情况,希望可以指点一下。邮箱zhaochaoqun33@163.com,谢谢!

时间: 2024-07-30 10:25:14

Post网址后,想要提取网页源码。但中间有页面跳转,请问如何提取跳转后的、最终页面源码的问题。困扰多日。求解!的相关文章

js-WPF的WebBrowser如何获取跳转后的页面源码?

问题描述 WPF的WebBrowser如何获取跳转后的页面源码? 我用webbrowser打开一个网页,并获取HTML源代码. 首先访问url_a,url_a加载的网页A里只有一段js代码,内容是通过location.replace()方法跳转到网页B,请问如何获得网页B的源代码或者是网页B的URL呢?我用LoadCompleted函数只能获得的是网页A的源码 解决方案 给控件添加导航响应,到页面之后就能返回url,不知道是不是你要的答案 解决方案二: 举个例子:获得控件的URL并且随意显示.拖

urllib-python 解析贴吧网页的时候获得的第一页非第一页页面源码基本一样

问题描述 python 解析贴吧网页的时候获得的第一页非第一页页面源码基本一样 url = 'http://tieba.baidu.com/p/3054674079?pn=1'url2='http://tieba.baidu.com/p/3054674079?pn=2'urllib.request.urlretrieve(urlG:/tieba.html"")通过这两个url下载的html源码基本上一致?为什么会这样呢?如果想像浏览器一样不同页数的源码不一样要怎么办?header =

Android中实现地址栏输入网址能浏览该地址网页源码并操作访问网络_Android

 首先实现简单布局: 复制代码 代码如下: <EditText android:id="@+id/et_url" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentRight="true&q

java获取页面源码后展示问题

问题描述 如题,在获取源码后,把源码照搬到java内置浏览器发现有些图片无法显示,如google首页的logo,好像是因为他是相对URL,不知道各位有没有什么解决办法 解决方案 解决方案二:如果是相对Url,在本地浏览器中肯定不能打开,因为你没有图片.楼主可以试试,先用Ie自带的保存功能将图片保存下来,然后放到自己工程里.其他如改成绝对Url(不推荐).解决方案三:引用1楼longxing8000的回复: 如果是相对Url,在本地浏览器中肯定不能打开,因为你没有图片.楼主可以试试,先用Ie自带的

Android: 在WebView中获取网页源码

1. 使能javascript:  ? 1 webView.getSettings().setJavaScriptEnabled(true); 2. 编写本地接口 ? 1 2 3 4 5 final class InJavaScriptLocalObj {     public void showSource(String html) {         Log.d("HTML", html);     } } 3. 向网页暴露本地接口 ? 1 webView.addJavascrip

把一个网站的网址嵌入到我的网页框架中去后,点击菜单失去链接效果,不知何解,请各位大虾帮帮忙吧

问题描述 我也遇到同样一个问题,把一个网站的网址嵌入到我的网页框架中去后,点击菜单失去链接效果,不知何解,请各位大虾帮帮忙吧鼠标点击网页任务栏中出现:javascript:__doPostBack('LeftMenu1','Traffic')的快捷方式类似http://www.elong.com的网站也是就出现了一样的结果我要想用谁能给我想想法子 解决方案 解决方案二:问题已解决是因为隐藏框架导致的!解决方案三:该回复于2009-09-28 09:39:42被版主删除

在ubuntu系统下使用python制作爬虫获取网页运行完js后的网页源码!

问题描述 在ubuntu系统下使用python制作爬虫获取网页运行完js后的网页源码! 求求大神帮忙,小弟跪谢!已经被这个问题困扰了很久,听说selenium可以实现,但是网上的源码都看不懂,希望那个大神能帮帮我,真的很急,谢谢 解决方案 selenium加载页面,这样可以等js执行完了以后,通知你python再去解析

实现网站(网页)跳转且可隐藏跳转后网址的代码

1.实现网站(网页)跳转且可隐藏跳转后网址的代码 <html> <head> <meta http-equiv="Content-Language" content="zh-CN"> <meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb2312"> <meta http-equiv="refr

HttpURLConnection获取网页源码 网址太长不能正确获取数据

问题描述 HttpURLConnection获取网页源码 网址太长不能正确获取数据 我用HttpURLConnection获取网页源码 当网址比较长的时候就无法正确连接到网页是怎么回事? 代码如下: private String getURLResponse(String urlString){ HttpURLConnection conn = null; //连接对象 InputStream is = null; String resultData = ""; try { URL u