Hatena::ブログ(Diary)

MOVE-i このページをアンテナに追加 RSSフィード

2010-06-21

[][]HttpsURLConnectionの利用制限

前のエントリーで、↓こんなエラーが出た件。

java.lang.NoClassDefFoundError: javax.net.ssl.HttpsURLConnection is a restricted class. Please see the Google App Engine developer's guide for more details.

どうやら、google app engineでは、HttpsURLConnectionに制限をかけているようだった。

↓このページを見ながら、POSTするあたりをコーディング。

http://code.google.com/intl/ja-JP/appengine/docs/java/urlfetch/usingjavanet.html

↓修正前

def postHatenaDiary(uri,wsseHeader,xml){
    HttpClient client = new DefaultHttpClient()
    HttpPost httppost = new HttpPost(uri)
    httppost.addHeader("X-WSSE", wsseHeader)
    StringEntity se = new StringEntity(xml,"UTF-8")
    httppost.setEntity(se)
    HttpResponse res = client.execute(httppost)
    //HTTPステータス確認
    res.getStatusLine()
}

↓修正後

def postHatenaDiary(uri,wsseHeader,xml){
        URL url = new URL(uri)
        HttpURLConnection connection = (HttpURLConnection) url.openConnection()
        connection.setRequestProperty("X-WSSE", wsseHeader)
        connection.setDoOutput(true)
        connection.setRequestMethod("POST")
        OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream())
        writer.write(xml)
        writer.close()
        if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
            // OK
        } else {
            // Server returned HTTP error code.
        }
}

最初、connection.getResponseCode()の部分を省略していたけど、POSTされてなくて、このコードの入ったif文が必要だったってことに気づかなかった。ということで、上のコードでOK.

これで、一通り、google app engineで実行してtweetをはてなダイアリーに投稿するところまでは出来たことになる。

日本語部分の文字化けや、時間がUTCで取得しているのがちょっと嫌だったりとか、そんな問題がありつつも。。