我正在编写代码,以编程方式读取页面并下载其内容,但它的工作方式与浏览器不同。请注意,我也使用cookie字符串。
我的代码是:
string strUrl = "http:" + "//mgac.webex." + "com";
string cookies_str = "vSeg=post_attendee; s_nr=1321305381566-New; s_lv=1321305381566; s_vnum=1322686800567%26vn%3D1; galaxyb_wl=R2355168776; JSESSIONID=Qlq1TR7Hf09KTsGHr4vv2GnTFF0NGRlLmGyYmMvzY5M29pbZ8yNp!31020270; DetectionBrowserStatus=3|1|32|1|4|2; CK_LanguageID_503319=1; CK_TimeZone_503319=4; CK_RegionID_503319=2; vSeg=post_attendee; s_nr=1321305381566-New; s_lv=1321305381566; s_vnum=1322686800567%26vn%3D1; galaxyb_wl=R2355168776; JSESSIONID=Qlq1TR7Hf09KTsGHr4vv2GnTFF0NGRlLmGyYmMvzY5M29pbZ8yNp!31020270;";
string other_saved_cookies = "screenWidth=1280; CK_CDNHostStatus=akamaicdn.webex.com|1322367753273|1";
string s;
using (WebClient client = new WebClient())
{
client.UseDefaultCredentials = true;
client.Headers.Add(HttpRequestHeader.Cookie, cookies_str);
s = client.DownloadString(strUrl);
}我得到了这样的回答:“找不到这一页.”
当我用Fiddler扫描请求时,我的浏览器会收到相同的答复,之后,他会向同一主机发出一个使用SSL的新请求。
我怎样才能像浏览器一样发出完全相同的请求来接收内容?
告诉客户端:“需要一个SSL连接”的信息在哪里?
发布于 2011-11-27 10:30:42
这看起来像你想要的如何在C#中使用HTTP请求?(违反议定书)
但是将"http“改为"https”可能是一个很好的起点!
然后,显然,设置一个ServicePointManager.ServerCertificateValidationCallback,如对上述帖子的两个答复中所示。
编辑
添加
string ua = "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:8.0) Gecko/20100101 Firefox/8.0";然后
client.Headers.Add(HttpRequestHeader.UserAgent, ua);然后解析重定向结果的位置标头。
发布于 2011-12-01 10:33:54
此网站使用302重定向将您带到SSL页面。
WebClient .NET类是一个自动跟踪重定向的智能类。它使用HttpWebRequest类并将AllowAutoRedirect设置为true。
因此,如果您将请求发送到原始URL,则当结果为302 (某种类型的重定向)时,WebClient将跨重定向(使用新请求)。如果结果代码不同,您将得到结果。它看起来像一个单独的http请求,但它执行2个http和1个https调用。
在这种情况下,您必须设置用户代理,因为远程站点不喜欢.NET的默认用户代理: none。
发布于 2011-11-27 12:13:31
检查这个msdn链接HTTP安全和ASP.NET网络服务
默认情况下,“要求安全通道( SSL )”复选框是清除的;选择它可以要求SSL。SSL支持40位和128位加密.加密使用的比特越多,就越难破解它并找出原始比特是什么。 一旦将资源设置为需要SSL进行通信,发送方和接收方之间发送的任何消息都将被加密和签名。这意味着外部方无法读取消息的内容。如果外部方更改了消息中的字节,则消息接收方可以检测到它。
您应该需要一些完整运行代码的凭据或证书信息。
可以使用RemoteCertificateValidationCallback委托来验证SSL证书。
请查看这些链接以获得代码帮助:
ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(AcceptAllCertifications);https://stackoverflow.com/questions/8284859
复制相似问题