【基础求教】制作监控百度云私密链接时的疑惑,解决立结贴

renyiqiu 2016-09-06 06:23:45
有这么一批百度云私密链接需要监控,定时查看是否挂挡了,请求的时候有个问题,百度云私密链接,比如http://pan.baidu.com/s/1o7QhUps,它在请求过程中还会进行302跳转,跳转到http://pan.baidu.com/share/init?shareid=3900055188&uk=1100738292,因此我写了这么个程序


string url = "http://pan.baidu.com/s/1o7QhUps";
HttpWebResponse response = XinBase_HttpHelper.CreateGetHttpResponse(url, 0, null, null);
string finalurl = response.GetResponseHeader("Location");
HttpWebResponse finalresponse = XinBase_HttpHelper.CreateGetHttpResponse(finalurl, 0, null, null);
string s = XinBase_HttpHelper.GetResponseString(finalresponse);
Console.WriteLine(s);


下面是请求方法,一个返回HttpWebResponse ,一个使用HttpWebResponse 的值再获取返回的html

/// <summary>
/// 创建GET方式的HTTP请求
/// </summary>
public static HttpWebResponse CreateGetHttpResponse(string url, int timeout, string userAgent, CookieCollection cookies)
{
HttpWebRequest request = null;
if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
{
//对服务端证书进行有效性校验(非第三方权威机构颁发的证书,如自己生成的,不进行验证,这里返回true)
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
request = WebRequest.Create(url) as HttpWebRequest;
request.ProtocolVersion = HttpVersion.Version10; //http版本,默认是1.1,这里设置为1.0
}
else
{
request = WebRequest.Create(url) as HttpWebRequest;
}
// request.AllowAutoRedirect = false;
request.Method = "GET";
request.UserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; QQWubi 133; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; CIBA; InfoPath.2)";
request.Proxy = null;

//设置代理UserAgent和超时
//request.UserAgent = userAgent;
//request.Timeout = timeout;
if (cookies != null)
{
request.CookieContainer = new CookieContainer();
request.CookieContainer.Add(cookies);
}
return request.GetResponse() as HttpWebResponse;
}

/// <summary>
/// 获取请求的数据
/// </summary>
public static string GetResponseString(HttpWebResponse webresponse)
{
using (Stream s = webresponse.GetResponseStream())
{
StreamReader reader = new StreamReader(s, Encoding.UTF8);
return reader.ReadToEnd();

}
}




现在问题就是在请求如
http://pan.baidu.com/s/1o7QhUps 这种类型的链接后,直接返回远程服务器返回错误: (403) 已禁止,不知道咋搞好
...全文
243 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
renyiqiu 2016-09-09
  • 打赏
  • 举报
回复
引用 4 楼 yi_iy 的回复:
第一步请求原链接就报403了?那你试试在,直接打开页面(新浏览器打开)输入第一步的请求是否正确? 如果是那就是你原链接有问题。 比如,你先访问百度页面 在访问http://pan.baidu.com/s/1o7QhUps这个页面没问题,直接访问http://pan.baidu.com/s/1o7QhUps就403 是否有个前置页面传cookies过来?
如您所说呢 已经解决代码如下

   string url = "http://pan.baidu.com/s/1o7QhUps";
            CookieCollection cookies = new CookieCollection();
            cookies.Add(new Cookie("BAIDUID", "XXX"));
            HttpWebResponse response = XinBase_HttpHelper.CreateGetHttpResponse(url, 0, null, cookies);
            string finalurl = response.ResponseUri.AbsoluteUri;
            HttpWebResponse finalresponse = XinBase_HttpHelper.CreateGetHttpResponse(finalurl, 0, null, null);
            string s = XinBase_HttpHelper.GetResponseString(finalresponse);
            Console.WriteLine(s);
就是添加了 这两个关键点

   CookieCollection cookies = new CookieCollection();
            cookies.Add(new Cookie("BAIDUID", "XXX"));
smileruner 2016-09-07
  • 打赏
  • 举报
回复
抓包看看是那个url 403呢?
  • 打赏
  • 举报
回复
第一步请求原链接就报403了?那你试试在,直接打开页面(新浏览器打开)输入第一步的请求是否正确? 如果是那就是你原链接有问题。 比如,你先访问百度页面 在访问http://pan.baidu.com/s/1o7QhUps这个页面没问题,直接访问http://pan.baidu.com/s/1o7QhUps就403 是否有个前置页面传cookies过来?
renyiqiu 2016-09-07
  • 打赏
  • 举报
回复
引用 2 楼 smileruner 的回复:
抓包看看是那个url 403呢?
原链接和跳转后的链接都是没有问题的,只是在第一步请求原链接就报403了~
renyiqiu 2016-09-06
  • 打赏
  • 举报
回复

62,052

社区成员

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

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

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

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