1 message in com.googlegroups.bloggerdevPosting to Blogger from Java
FromSent OnAttachments
kru28 Apr 2006 03:24 
Subject:Posting to Blogger from Java
From:kru (admi@yahoo.com)
Date:04/28/2006 03:24:57 AM
List:com.googlegroups.bloggerdev

Hi, I'm trying to post to Blogger using the code below:

Here's the response: Server returned HTTP response code: 401 for URL: https://www.blogger.com/atom/25051649

I would greatly appreciate if someone pointed out my error.

Thanks.

**********************************************************************************************

URL url = new URL("https://www.blogger.com/atom/25051649"); String username = "mobimobi"; String password = "blablabla";

String request = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n" + "<entry xmlns=\"http://purl.org/atom/ns#\">\r\n" + "<title mode=\"escaped\" type=\"text/plain\">atom test</title>\r\n" + "<issued>2004-04-12T06:07:20Z</issued>\r\n" + "<generator url=\"http://www.yoursitesurlhere.com\">Your client's name here.</generator>\r\n" + "<content type=\"application/xhtml+xml\">\r\n" + "<div xmlns=\"http://www.w3.org/1999/xhtml\">Testing the Atom API</div>\r\n" + "</content>\r\n" + "</entry>\r\n";

HttpURLConnection connection = (HttpURLConnection)(url.openConnection());

if(connection instanceof HttpsURLConnection) { SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault(); ((HttpsURLConnection)connection).setSSLSocketFactory (factory); }

String userPass = username + ":" + password; String base64UserPass = base64Encode(userPass.getBytes());

connection.setDoOutput(true);

OutputStreamWriter wr = new OutputStreamWriter(connection.getOutputStream()); BufferedReader rd = new BufferedReader(new InputStreamReader( connection.getInputStream())); String line;

while ((line = rd.readLine()) != null) { System.out.println(line); }

wr.close(); rd.close();

} catch (Exception e) { e.printStackTrace(); }

__________________________________________________________________

private static String base64Encode(byte[] bytes) { return new sun.misc.BASE64Encoder().encode(bytes); }

private static String generateTimestamp() { SimpleDateFormat dateFormatter = new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss'Z'"); return dateFormatter.format(new Date()); }

private static String getWSSEHeader(String username, String password) throws Exception {

byte[] nonceB = generateNonce(); String nonce = base64Encode(nonceB);

String created = generateTimestamp();

String password64 = getBase64Digest(nonceB, created.getBytes("UTF-8"), password.getBytes("UTF-8")); StringBuffer header = new StringBuffer("UsernameToken Username=\""); header.append(username); header.append("\", "); header.append("PasswordDigest=\""); header.append(password64); header.append("\", "); header.append("Nonce=\""); header.append(nonce); header.append("\", "); header.append("Created=\""); header.append(created); header.append("\"");

System.out.println(header.toString());

return header.toString(); }

private static byte[] generateNonce() { String nonce = Long.toString(new Date().getTime()); return nonce.getBytes(); }

private static synchronized String getBase64Digest(byte[] nonce, byte[] created, byte[] password) { try { MessageDigest messageDigester = MessageDigest.getInstance("SHA-1"); // SHA-1 ( nonce + created + password ) messageDigester.reset(); messageDigester.update(nonce); messageDigester.update(created); messageDigester.update(password); return base64Encode(messageDigester.digest()); } catch (java.security.NoSuchAlgorithmException e) { throw new RuntimeException(e); } }

private static synchronized String getBase64Digest(byte[] password) { try { MessageDigest messageDigester = MessageDigest.getInstance("SHA-1"); messageDigester.reset(); messageDigester.update(password); return base64Encode(messageDigester.digest()); } catch (java.security.NoSuchAlgorithmException e) { throw new RuntimeException(e); }

}

***************************************************************************************************