C# 如何将HttpWebRequest与类似浏览器的Cookie一起使用?
我正在修复一个模块,检查谷歌关键词排名,每30秒检查一个关键词。那一天,谷歌阻止了这个请求,这个模块对我们的项目非常重要 我在模块中使用了HtmlAgilityPack,代码如下:C# 如何将HttpWebRequest与类似浏览器的Cookie一起使用?,c#,cookies,httpwebrequest,C#,Cookies,Httpwebrequest,我正在修复一个模块,检查谷歌关键词排名,每30秒检查一个关键词。那一天,谷歌阻止了这个请求,这个模块对我们的项目非常重要 我在模块中使用了HtmlAgilityPack,代码如下: HttpWebRequest req=WebRequest.Create(uri)为HttpWebRequest; req.Method=“GET”; req.UserAgent=“Mozilla/5.0(Windows;U;Windows NT 5.1;en-US;rv:1.9.2)Gecko/20100115 F
HttpWebRequest req=WebRequest.Create(uri)为HttpWebRequest;
req.Method=“GET”;
req.UserAgent=“Mozilla/5.0(Windows;U;Windows NT 5.1;en-US;rv:1.9.2)Gecko/20100115 Firefox/3.6”;
//从磁盘读取最后一个cookie,并随请求发送
CookieContainer cookies=从磁盘读取cookies(Cookie文件);
req.CookieContainer=cookies;
//请求google,url如下:https://www.google.com/search?start=0&num=20&q=may+do+huyet+ap&hl=vi
resp=req.GetResponse()作为HttpWebResponse;
//将新cookie保存到磁盘
CookieContainer newCookies=req.CookieContainer;
WriteCookiesToDisk(cookieFile,newCookies);//使用Serialize Object to BinaryFormatter将cookie写入磁盘
下面是对二进制文件的2个函数读/写cookie
public void WriteCookiesToDisk(string file, CookieContainer cookieJar)
{
using (Stream stream = File.Create(file))
{
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, cookieJar);
}
}
public CookieContainer ReadCookiesFromDisk(string file)
{
try
{
using (Stream stream = File.Open(file, FileMode.Open))
{
BinaryFormatter formatter = new BinaryFormatter();
return (CookieContainer)formatter.Deserialize(stream);
}
}
catch (Exception e)
{
return new CookieContainer();
}
}
1天后,谷歌通过验证码阻止了请求,我发现:
- 如果我更改了IP,我可以继续请求。所以,谷歌通过IP封锁
- 使用带有启用cookie的Opera,即使Google用相同的关键字阻止我的模块,Opera仍然会搜索Google,但如果我禁用Opera的cookie,Opera将无法像搜索我的模块一样搜索Google
你能帮帮我吗?每隔30秒?听起来有点频繁。我并不奇怪你被封锁了。为什么这么频繁?我不确定Cookie是否能为您节省时间,所以不能帮助您绕过服务提供商的限制,因为它们不为公众所知,如果存在know hack,它们会很快改变,从而使答案几乎立即过时。如果您询问代码的一般问题,您需要发布完整的示例以及您看到的错误。到目前为止,尚不清楚So如何帮助您。谢谢,我添加了两个读/写cookie函数的详细信息,我对它们进行了测试,似乎它们可以工作。我正试图像Opera一样请求谷歌。同时,相同的互联网连接,Opera启用Cookie可以谷歌,但我的模块发送Cookie请求不能做到这一点。这个模块对我们的搜索引擎优化过程很重要。cookie基本上只是一个域、一条路径、一个名称和一个值,顺便说一句。所有的东西都可以很容易地以纯文本的形式存储。