首页 新闻 会员 周边

如何获取重定向后的url

0
悬赏园豆:100 [已解决问题] 解决于 2013-06-05 11:23

如果想通过某种方法得到下面item.taobao.com的那个地址,也就是s.click.taobao.com在浏览器里回车后显示的url地址,求大神指点..

http://s.click.taobao.com/t?e=zGU34CA7K%2BPkqB07S4%2FK0CITy7klxn%2Fr3HZwuuY0VC7BwYkZv73a3PW1o5SlwMRiGrcwbOzwa3N3JoOfoVfSM2RlTfwcGDtjuwKnx8nBa%2FaGrfk94bBOek1t8uBhMOkj8M0KzYhxTDClgTNrzeglhB0kL3Mi2xiQcNpLhBuB6Ueo19xG2FeJp%2BZN9VlQYnF6ZDMmTWGU&unid=1S14021878&spm=2014.12019391.1.0

http://item.taobao.com/item.htm?id=18368957164&ali_trackid=2:mm_14601757_0_0,1S14021878:1369473377_3k2_1095680117&spm=2014.12019391.1.0

fenghuo的主页 fenghuo | 初学一级 | 园豆:20
提问于:2013-06-03 17:50
< >
分享
最佳答案
1

用HttpWebRequest发送请求并且不允许自动重定向,返回的HttpWebResponse里应该有重定向的链接地址。

收获园豆:70
I,Robot | 大侠五级 |园豆:9783 | 2013-06-03 18:00

多谢 Rainier-Soft.Com

是指Head中的Location 吗?貌似取到的还是一个中转地址...

fenghuo | 园豆:20 (初学一级) | 2013-06-03 20:08

@fenghuo: 能拿到中转地址的话你再重新请求得到的地址直到返回的HttpWebResponse不再是重定向不就是最终的地址了吗?

I,Robot | 园豆:9783 (大侠五级) | 2013-06-03 21:50

@Rainier-Soft.Com: 

嗯,思路是这样

但用Fiddler看这个请求,发现似乎没这么容易,第一次拿到的重定向地址做跳转 响应状态是200

而后页面的内容是一段js,触发一个点击事件,再做跳转,好像还有些访问权限的验证

 

求大神明点

fenghuo | 园豆:20 (初学一级) | 2013-06-04 12:47

@fenghuo: 那段js实际上也只是将当前请求url中的参数(这个参数就是下一个要请求的url)做了一下urldecode然后再发送请求而已,你用c#把这个参数decode出来,然后再请求一次就可以了,记得请求时把referer带上。

I,Robot | 园豆:9783 (大侠五级) | 2013-06-04 13:36

@fenghuo: 算了,直接给你测试代码吧

 1 public void GetTaobaoItemUrl() {
 2     string url = "http://s.click.taobao.com/t?e=zGU34CA7K%2BPkqB07S4%2FK0CITy7klxn%2Fr3HZwuuY0VC7BwYkZv73a3PW1o5SlwMRiGrcwbOzwa3N3JoOfoVfSM2RlTfwcGDtjuwKnx8nBa%2FaGrfk94bBOek1t8uBhMOkj8M0KzYhxTDClgTNrzeglhB0kL3Mi2xiQcNpLhBuB6Ueo19xG2FeJp%2BZN9VlQYnF6ZDMmTWGU&unid=1S14021878&spm=2014.12019391.1.0";
 3     HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
 4     request.AllowAutoRedirect = false;
 5     HttpWebResponse response = request.GetResponse() as HttpWebResponse;
 6     url = response.Headers["Location"];
 7     response.Close();
 8     Uri uri = new Uri(url);
 9     url = HttpUtility.UrlDecode(uri.Query.Substring(4));
10     request = WebRequest.Create(url) as HttpWebRequest;
11     request.AllowAutoRedirect = false;
12     request.Referer = uri.ToString();
13     response = request.GetResponse() as HttpWebResponse;
14     url = response.Headers["Location"];
15     response.Close();
16     Console.WriteLine(url);
17 }
I,Robot | 园豆:9783 (大侠五级) | 2013-06-04 13:47

@Rainier-Soft.Com: 

多谢@Rainier-Soft.Com: 大侠,问题已搞定 

fenghuo | 园豆:20 (初学一级) | 2013-06-05 11:23
其他回答(4)
0

你是想在什么位置获取这个信息?

TiestoRay | 园豆:687 (小虾三级) | 2013-06-04 08:46
0

使用HttpWebRequest模拟请求

Parry | 园豆:583 (小虾三级) | 2013-06-04 10:57

用response的Head中的Location 试验过

但结果如上,麻烦明点.谢谢

支持(0) 反对(0) fenghuo | 园豆:20 (初学一级) | 2013-06-04 12:49
1

http://www.sufeinet.com/thread-3-1-1.html

用我的这个Httphelper类,进行做

设置一下

 Allowautoredirect = true,//是否根据301跳转     可选项

这个属性为True时,可以自动跳转到301的页面

收获园豆:30
苏飞 | 园豆:2024 (老鸟四级) | 2013-06-04 13:00

多谢 苏飞

用Fiddler看这个请求,发现似乎没这么容易,第一次拿到的重定向地址做跳转 响应状态是200

而后页面的内容是一段js,触发一个点击事件,再做跳转,好像还有些访问权限的验证

 

或者能明点下 具体使用类中的哪个函数能做到. 谢谢

支持(0) 反对(0) fenghuo | 园豆:20 (初学一级) | 2013-06-04 13:10

@fenghuo: 有教程,你可以看一下,就一个方法,一个输入参数类,一个返回类,

你的这个需要分析下页面才能取到Js的东东,然后继续请求,带上Cookie就行了,这些我给你的连接里都有例子

支持(0) 反对(0) 苏飞 | 园豆:2024 (老鸟四级) | 2013-06-04 13:16

@苏飞-C#.Net: 

ok  多谢

我研究研究 再来反馈..

支持(0) 反对(0) fenghuo | 园豆:20 (初学一级) | 2013-06-04 13:44
0

中间如果有javascript做跳转的话, 试试用 WebBrowser control, 取得最后的page url

gunsmoke | 园豆:3592 (老鸟四级) | 2013-06-05 10:42
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册