ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Visual Basic User's ClubコミュのAmeba atom api での投稿について

  • mixiチェック
  • このエントリーをはてなブックマークに追加
お世話になります!!
いきなりのトピ立て失礼します。

VB2008にての開発を行っています。
情報が少ないので質問させていただきました。


アメブロへのAtom Api投稿を試みていますが、うまくいきません。
非公式(?)のようで、体制もしっかりしていない中模索しています。


コードは下記となります。
パスワードをMD5でハッシュし、通常のWSSE認証を行っています。

使用しているユーザーIDとパスでブラウザではログインできるのですが
下記コードですと401エラーが返ってきます・・・。

問題点・解決法あれば宜しくお願いいたします。


'--------------------------------------------------------ここから

Dim postDataBytes As Byte() = System.Text.Encoding.UTF8.GetBytes(XMLString)
Dim URL As String = "​http://atomblog.ameba.jp/servlet/_atom/blog"​

'HttpWebRequestの作成
Dim webreq As System.Net.HttpWebRequest = _
CType(System.Net.WebRequest.Create(URL), System.Net.HttpWebRequest)

webreq.Method = "POST"
webreq.UserAgent = "Blogposter"
webreq.ContentType = "text/xml"
webreq.ContentLength = postDataBytes.Length


Dim nowt As DateTime = DateTime.Now '現在の時間取得
Dim dtnow As String = nowt.ToString("yyyy-MM-ddTHH:mm:ssZ")
Dim key As String
Dim base64 As String
Dim shasp As SHA1CryptoServiceProvider

'WSSE認証の作成
shasp = New System.Security.Cryptography.SHA1CryptoServiceProvider() 'SHA処理用
Dim md5sp = New MD5CryptoServiceProvider()
key = "tekitounisitemiruyon"
Dim md5pass As String = BitConverter.ToString(md5sp.ComputeHash(System.Text.Encoding.ASCII.GetBytes(password))).ToLower().Replace("-", "")
base64 = System.Convert.ToBase64String(shasp.ComputeHash(System.Text.Encoding.UTF8.GetBytes(md5pass & key & dtnow)))


Dim ninsyou As String = "UsernameToken Username=""" & username & """, PasswordDigest=""" & base64 & """, Nonce=""" & System.Convert.ToBase64String(System.Text.Encoding.ASCII.GetBytes(key)) & """, Created=""" & dtnow & """" '認証文の完成

webreq.Headers.Add("X-WSSE", ninsyou) 'HTTP接続に付ける




Dim reqStream As System.IO.Stream = webreq.GetRequestStream()

reqStream.Write(postDataBytes, 0, postDataBytes.Length)
reqStream.Close()
'レスポンスの取得

Dim response As System.Net.HttpWebResponse = Nothing
Dim doc As New System.Xml.XmlDocument()
'レスポンスの取得
Try
response = CType(webreq.GetResponse(), System.Net.HttpWebResponse)
Dim strm As System.IO.Stream = response.GetResponseStream()

'XmlDocumant に読み込む
doc.Load(strm)
Catch ex As Exception
Return "エラー:" & ex.Message
Exit Function

End Try

'--------------------------------------------------------ここまで


なお、コードの基は下記URLのライブドア投稿を参考にさせていただきました。
http://vb2008.seesaa.net/article/105964818.html

コメント(3)

http://redfish.seesaa.net/article/137733513.html

こういうことですかね。
PasswordDigest が md5pass + nonce + created になってますが、 nonce + created + md5pass にしたらどうでしょう?
それと、X-WSSEヘッダのnonceをbase64エンコードしてますが、これは不要だと思います。
(PasswordDigestはbase64エンコードしておく必要があります。)

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Visual Basic User's Club 更新情報

Visual Basic User's Clubのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング