Google'ın OAuth2 hizmetine bağlanmaya çalışırken benzer sorunlar yaşadım.
Ben böyle WebRequest kullanarak değil, POST yazma sona erdi:
TcpClient client = new TcpClient("accounts.google.com", 443);
Stream netStream = client.GetStream();
SslStream sslStream = new SslStream(netStream);
sslStream.AuthenticateAsClient("accounts.google.com");
{
byte[] contentAsBytes = Encoding.ASCII.GetBytes(content.ToString());
StringBuilder msg = new StringBuilder();
msg.AppendLine("POST /o/oauth2/token HTTP/1.1");
msg.AppendLine("Host: accounts.google.com");
msg.AppendLine("Content-Type: application/x-www-form-urlencoded");
msg.AppendLine("Content-Length: " + contentAsBytes.Length.ToString());
msg.AppendLine("");
Debug.WriteLine("Request");
Debug.WriteLine(msg.ToString());
Debug.WriteLine(content.ToString());
byte[] headerAsBytes = Encoding.ASCII.GetBytes(msg.ToString());
sslStream.Write(headerAsBytes);
sslStream.Write(contentAsBytes);
}
Debug.WriteLine("Response");
StreamReader reader = new StreamReader(sslStream);
while (true)
{ // Print the response line by line to the debug stream for inspection.
string line = reader.ReadLine();
if (line == null) break;
Debug.WriteLine(line);
}
Yanıt akışına yazılan yanıt, peşinde olduğunuz belirli hata metnini içerir.
Özellikle, benim sorunum url kodlu veri parçaları arasına son satır koymak oldu. Onları çıkardığımda her şey işe yaradı. Hizmetinize bağlanmak ve gerçek yanıt hatası metnini okumak için benzer bir teknik kullanabilirsiniz.