6

我嘗試使用ClientLogin谷歌ClientLogin驗證

URL url = new URL("https://www.google.com/accounts/ClientLogin"); 
HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
connection.setDoOutput(true); 
connection.setRequestMethod("POST"); 

connection.setRequestProperty("Email", "testonly%2Ein%2E2011%40gmail%2Ecom"); 
connection.setRequestProperty("Passwd", "mypass"); 
connection.setRequestProperty("accountType", "HOSTED"); 
connection.setRequestProperty("service", "apps"); 
connection.connect(); 

使認證,但我得到Error=BadAuthentication。我應該如何糾正我的代碼?

+0

我在GAE平臺上運行它,如果它很重要 – 2011-03-17 18:07:22

回答

5

您應該設置正確的application/x-www-form-urlencoded Content-type並使用OutputStream來編寫POST正文。

//Open the Connection 
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 
urlConnection.setRequestMethod("POST"); 
urlConnection.setDoInput(true); 
urlConnection.setDoOutput(true); 
urlConnection.setUseCaches(false); 
urlConnection.setRequestProperty("Content-Type", 
           "application/x-www-form-urlencoded"); 

// Form the POST parameters 
StringBuilder content = new StringBuilder(); 
content.append("Email=").append(URLEncoder.encode(youremail, "UTF-8")); 
content.append("&Passwd=").append(URLEncoder.encode(yourpassword, "UTF-8")); 
content.append("&service=").append(URLEncoder.encode(yourapp, "UTF-8")); 
OutputStream outputStream = urlConnection.getOutputStream(); 
outputStream.write(content.toString().getBytes("UTF-8")); 
outputStream.close(); 

// Retrieve the output 
int responseCode = urlConnection.getResponseCode(); 
InputStream inputStream; 
if (responseCode == HttpURLConnection.HTTP_OK) { 
    inputStream = urlConnection.getInputStream(); 
} else { 
    inputStream = urlConnection.getErrorStream(); 
} 

this例如用於處理結果得到auth令牌。

+0

+1非常感謝。不幸的是,我只有明天才有可能檢查它。 – 2011-03-17 21:34:06