如果想通过某种方法得到下面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
用HttpWebRequest发送请求并且不允许自动重定向,返回的HttpWebResponse里应该有重定向的链接地址。
是指Head中的Location 吗?貌似取到的还是一个中转地址...
@fenghuo: 能拿到中转地址的话你再重新请求得到的地址直到返回的HttpWebResponse不再是重定向不就是最终的地址了吗?
@Rainier-Soft.Com:
嗯,思路是这样
但用Fiddler看这个请求,发现似乎没这么容易,第一次拿到的重定向地址做跳转 响应状态是200
而后页面的内容是一段js,触发一个点击事件,再做跳转,好像还有些访问权限的验证
求大神明点
@fenghuo: 那段js实际上也只是将当前请求url中的参数(这个参数就是下一个要请求的url)做了一下urldecode然后再发送请求而已,你用c#把这个参数decode出来,然后再请求一次就可以了,记得请求时把referer带上。
@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 }
@Rainier-Soft.Com:
多谢@Rainier-Soft.Com: 大侠,问题已搞定
你是想在什么位置获取这个信息?
使用HttpWebRequest模拟请求
用response的Head中的Location 试验过
但结果如上,麻烦明点.谢谢
http://www.sufeinet.com/thread-3-1-1.html
用我的这个Httphelper类,进行做
设置一下
Allowautoredirect = true,//是否根据301跳转 可选项
这个属性为True时,可以自动跳转到301的页面
多谢 苏飞
用Fiddler看这个请求,发现似乎没这么容易,第一次拿到的重定向地址做跳转 响应状态是200
而后页面的内容是一段js,触发一个点击事件,再做跳转,好像还有些访问权限的验证
或者能明点下 具体使用类中的哪个函数能做到. 谢谢
@fenghuo: 有教程,你可以看一下,就一个方法,一个输入参数类,一个返回类,
你的这个需要分析下页面才能取到Js的东东,然后继续请求,带上Cookie就行了,这些我给你的连接里都有例子
@苏飞-C#.Net:
ok 多谢
我研究研究 再来反馈..
中间如果有javascript做跳转的话, 试试用 WebBrowser control, 取得最后的page url