关于C# 爬虫抓取 反爬虫521 如何解决

反转皇潮 2019-03-14 11:51:08
本人查阅资料 网上所说需要解密两次js加密 用解密后的结果放到cookie里面再去请求就能正常获取到html

问题一:我用的http请求代码 怎么才能返回给我结果,现在直接会跳到catch里面


代码:
try
{
string htmlCode;
HttpWebRequest webRequest = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url);
webRequest.Timeout = 30000;
webRequest.Method = "GET";

SetHeaderValue(webRequest.Headers, "Host", "");//这里我就不显示啦
SetHeaderValue(webRequest.Headers, "Connection", "keep-alive");
SetHeaderValue(webRequest.Headers, "Cache-Control", "max-age=0");
SetHeaderValue(webRequest.Headers, "Upgrade-Insecure-Requests", "1");
SetHeaderValue(webRequest.Headers, "User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36");
SetHeaderValue(webRequest.Headers, "Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8");
SetHeaderValue(webRequest.Headers, "Accept-Encoding", "gzip, deflate");
SetHeaderValue(webRequest.Headers, "Accept-Language", "zh-CN,zh;q=0.9");

HttpWebResponse webResponse = (System.Net.HttpWebResponse)webRequest.GetResponse();
if (webResponse.ContentEncoding.ToLower() == "gzip")//如果使用了GZip则先解压
{
using (System.IO.Stream streamReceive = webResponse.GetResponseStream())
{
using (var zipStream =
new System.IO.Compression.GZipStream(streamReceive, System.IO.Compression.CompressionMode.Decompress))
{
using (StreamReader sr = new System.IO.StreamReader(zipStream, Encoding.Default))
{
htmlCode = sr.ReadToEnd();
}
}
}
}
else
{
using (System.IO.Stream streamReceive = webResponse.GetResponseStream())
{
using (System.IO.StreamReader sr = new System.IO.StreamReader(streamReceive, Encoding.Default))
{
htmlCode = sr.ReadToEnd();
}
}
}
return htmlCode;
}
catch (Exception e)
{
return e.ToString();
}

我应该怎样做才能 的到结果的 就是网上所的那段js 我去在线请求get的网站测试 那个网站是能返回js的 求大神教下 或者发个请求代码
...全文
666 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ts926520 2019-07-20
  • 打赏
  • 举报
回复
您好,问题解决了吗?
反转皇潮 2019-03-18
  • 打赏
  • 举报
回复
大神们能发个代码看看嘛 第一个js解码出来了 第二个js不知道怎么弄了
敌敌畏耶 2019-03-18
  • 打赏
  • 举报
回复
catch (WebException ex) { res = (HttpWebResponse)ex.Response; } 确实可以!!感谢!!!
stherix 2019-03-14
  • 打赏
  • 举报
回复
用 catch (WebException ex) { res = (HttpWebResponse)ex.Response; } 的方法获取返回非200情况下的response 然后用一个js引擎(比如V8)运行你获取到的代码 然后再用你说的方法带上参数再请求一次

111,097

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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