我知道这个问题已在SO多次询问过。但是我没有在我看过的主题中找到任何答案或解决方案。
我正在运行下面的代码(C#),用于使用c2dm进行身份验证。然而,我从一开始就一直得到403 Forbidden。
当我尝试做的时候会发生什么:
WebResponse response = request.GetResponse();
它抛出一个WebException。当我在那里调查WebException和响应对象时,我看不到来自Google的任何错误消息,即使Google的文档说它应该说明为什么我会得到403.但是我看到的只是“403 Forbidden”。
我使用的帐户已注册使用C2DM。
我很欣赏一些输入=)
WebRequest request = WebRequest.Create(GoogleAuthUrl);
request.Method = PostWebRequest;
NameValueCollection postFieldNameValue = new NameValueCollection();
postFieldNameValue.Add("Email", "my.email@gmail.com");
postFieldNameValue.Add("Passwd", "mypassword");
postFieldNameValue.Add("accountType", "GOOGLE");
postFieldNameValue.Add("source", "SomeRandomString");
postFieldNameValue.Add("service", "ac2dm");
string postData = GetPostStringFrom(postFieldNameValue);
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = byteArray.Length;
Stream dataStream = request.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
WebResponse response = request.GetResponse();
if (((HttpWebResponse)response).StatusCode.Equals(HttpStatusCode.OK))
{
dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string responseFromServer = reader.ReadToEnd();
authTokenString = ParseForAuthTokenKey(responseFromServer);
reader.Close();
dataStream.Close();
}
else
{
Console.WriteLine("Response from web service not OK :");
Console.WriteLine(((HttpWebResponse)response).StatusDescription);
}