some servers expect to get authentication without asking for it. and C# does not send it if you just use request.Credentials = cc; you can see you are missing the Header if you use wireshark and look at what it being sent to the server. The way to overcome this is to force an authentication header.
//so instead of using:
//request.Credentials = cc;
//request.PreAuthenticate = true;
//you should call:
SetBasicAuthHeader(request, "my_email", "my_password")
}
public void SetBasicAuthHeader(WebRequest request, String userName, String userPassword)
{
string authInfo = userName + ":" + userPassword;
authInfo = Convert.ToBase64String(Encoding.Default.GetBytes(authInfo));
request.Headers["Authorization"] = "Basic " + authInfo;
}