Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将HttpWebRequest与类似浏览器的Cookie一起使用?_C#_Cookies_Httpwebrequest - Fatal编程技术网

C# 如何将HttpWebRequest与类似浏览器的Cookie一起使用?

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

我正在修复一个模块,检查谷歌关键词排名,每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 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

所以,我正在尝试启用类似cookie的Opera(正如上面的代码),但Opera可以工作,但我的代码不工作


你能帮帮我吗?

每隔30秒?听起来有点频繁。我并不奇怪你被封锁了。为什么这么频繁?我不确定Cookie是否能为您节省时间,所以不能帮助您绕过服务提供商的限制,因为它们不为公众所知,如果存在know hack,它们会很快改变,从而使答案几乎立即过时。如果您询问代码的一般问题,您需要发布完整的示例以及您看到的错误。到目前为止,尚不清楚So如何帮助您。谢谢,我添加了两个读/写cookie函数的详细信息,我对它们进行了测试,似乎它们可以工作。我正试图像Opera一样请求谷歌。同时,相同的互联网连接,Opera启用Cookie可以谷歌,但我的模块发送Cookie请求不能做到这一点。这个模块对我们的搜索引擎优化过程很重要。cookie基本上只是一个域、一条路径、一个名称和一个值,顺便说一句。所有的东西都可以很容易地以纯文本的形式存储。