Reputation: 1339
I'm making a code that reads the a page and downloads it contents programmatically, but it does not work same way as a browser. Note that I'm also using cookies string.
my code is:
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);
}
I get this answer: "The Page Cannot be found..."
when I scan the Request with Fiddler, my browser recieves the same answer, after that he makes a new request to using SSL to same host.
How can I make exactly same request to receive content like a browser
Where is the information that tells client: "a SSL connection is required" ?
Upvotes: 3
Views: 45143
Reputation: 3176
If you simply want to load up a page via https (ssl), this will work. If you want to take a look at the certificate, I recommend using a full delgate method
ServicePointManager.ServerCertificateValidationCallback = ( ( sender , certificate , chain , sslPolicyErrors ) => true ); //allows for validation of SSL certificates
Or with full delegate method
ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback( delegateHttpSsl );
private bool delegateHttpSsl(object obj, System.Security.Cryptography.X509Certificate c1, System.Security.Cryptography.X509Certifciates.X509Chain c2, SslPolicyErrors c3)
{
return true;
}
Upvotes: 0
Reputation: 370
This web site uses 302 redirects to bring you to the SSL page.
The WebClient .NET class is a smart class that automatically follows the redirects. It uses the HttpWebRequest class and sets the AllowAutoRedirect to true.
So if you issue your request to the original URL, the WebClient steps over the redirects (using new requests) while the result is 302 (some kind of redirect). If the result code is different, you will get the result. It looks like a single http request, but it does 2 http and 1 https calls.
You have to set the user agent in this case as shunty posted it previously, because the remote site not likes the .NET's default user agent: none.
Upvotes: 2
Reputation: 3758
This looks like what you're after How to use HTTP GET request in C# with SSL? (protocol violation)
But changing "http" to "https" might be a good starting point!
Then, apparently, setting a ServicePointManager.ServerCertificateValidationCallback as shown in 2 of the replies to the above post.
EDIT
Add
string ua = "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:8.0) Gecko/20100101 Firefox/8.0";
then
client.Headers.Add(HttpRequestHeader.UserAgent, ua);
Then parse the Location header of the redirected result.
Upvotes: 6
Reputation: 18290
Check this msdn link HTTP Security and ASP.NET Web Services
By default, the Require secure channel (SSL) check box is clear; select it to require SSL. SSL supports both 40-bit and 128-bit encryption. The more bits used by the encryption, the harder it is to break it and figure out what the original bits were.
Once you have the resource set up to require SSL for communications, any messages sent between the sender and receiver will be encrypted and signed. This means that outside parties cannot read the contents of the messages. If an outside party changes the bytes in the message, the message receiver can detect it.
You Should need some Credential or Certificate information of run your code perfectly.
You could use the RemoteCertificateValidationCallback delegate for validating the SSL certificate
Check these links for code help:
ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(AcceptAllCertifications);
How to use HTTP GET request in C# with SSL? (protocol violation)
How do I use WebRequest to access an SSL encrypted site using https?
Upvotes: 1