久々に Trac Lighting をインストールして、ひとりプロジェクト管理をしようかなぁと思い
どうせならば、wordpress への投稿ツールを作った時と同じように XML-RPC 経由が良かろうといことで。
.NET(C#)でXML-RPCを使ってブログに投稿する | Moonmile Solutions Blog
http://www.moonmile.net/blog/archives/1284
Trac への XML-RPC 投稿の場合は、authenticated に XML_RPC の権限を与えて、投稿時には Digest 認証で接続、ってな感じです。このダイジェスト認証なのですが、昨日の夜中に3時間ほどハマりました。
結果から言えば、こんな感じ。
string url = "http://localhost:8000/trac/gokui-ios5"; string userName = "masuda"; string password = "masuda"; HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url); req.UserAgent = "trac-post"; // User-Agent が必須★2 req.Credentials = new NetworkCredential(userName, password); // 認証★1 HttpWebResponse res = (HttpWebResponse)req.GetResponse(); StreamReader sr = new StreamReader(res.GetResponseStream()); string txt = sr.ReadToEnd(); Debug.Print(txt);
まずは、★1 のところでダイジェスト認証をします。HttpWebRequest クラスを使うと、ベーシック認証とダイジェスト認証が使えるそうなのですが、この区別は自動的に行われるみたいです。★1 の行をコメントアウトすると、401 のエラーが帰ります。認証を要求しているのだが、ユーザー名、パスワードを送らなかったので、「許可されていません」ってな具合です。
上記は、google で検索して msdn に行きあたると、なんとかなるのですが、★2 の User-Agent の件でハマりました。
この行をコメントアウトすると、500 内部サーバーエラーが発生します。
これが良くわからなくて、なんだろう…と思っていたのですが、Apache のほうで User-Agnet がないのでエラーを返しているみたいなんですね…IIS サーバーのほうでも、ローカルにある IIS 7.0 では User-Agent がなくても大丈夫なのですが、microsoft.com に HttpWebRequest クラスを使って接続すると、同じように内部サーバーエラーが返ります。多分、サーバーで動作しているプログラムの関係かと。
なので、
req.UserAgent = "trac-post";
のように、UserAgent プロパティに設定を適当に設定します。ブラウザを偽装してもよいし、どうせ、XML-RPC なので、ここは適当に設定すればよいでしょう。
これで接続確認だけはできたので、wordpress の時と同じように、http://www.xml-rpc.net/ を使ってチケットを投稿できるようにするか、自前で XML を構築するかを思案。
Heya i am for the primary time here. I found this board and I in finding It really useful & it helped me out a lot.
I hope to provide something again and help others like you aided me.