QA@IT

Windows PhoneのSilverlightでInstapaperのSimple APIをエラーなく呼び出すには?

1088 PV

Windows PhoneアプリからInstapaperのSimple APIを呼び出したいと思います。
Instapaper: Simple Developer API Documentation
http://www.instapaper.com/api/simple
単純なコードにすると以下のような感じです。(GETでもPOSTでも同様なようなので説明の簡略化のためにGETにしてあります)

var wc = new WebClient();
 wc.DownloadStringCompleted +=new DownloadStringCompletedEventHandler((s, e) =>
 {
    // 'e.Result' は、型 'System.Net.WebException' の例外をスローしました。
    // m_Status = UnknownError
    // do something...
 });
 var sb = new StringBuilder();
 sb.Append("https://www.instapaper.com/api/add?");
 sb.Append("username=" + username);
 sb.Append("&password=" + password);
 sb.Append("&url=" + HttpUtility.UrlEncode(url));
 wc.DownloadStringAsync(new Uri(sb.ToString()));

WebClientだとエラーが取れないかと思ってHttpWebRequestに展開してみましたが、今度はますますわからないエラーを出します。

[net_WebHeaderInvalidControlChars]
Arguments:
Debugging resource strings are unavailable. Often the key and arguments provide sufficient information to diagnose the problem. See http://go.microsoft.com/fwlink/?linkid=106663&Version=4.7.60408.0&File=System.Net.dll&Key=net_WebHeaderInvalidControlChars 
Parameter name: name
at System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod, Object state)
at System.Net.Browser.ClientHttpWebRequest.EndGetResponse(IAsyncResult asyncResult)

色々ググってみると、どうもResponseヘッダに非ASCII文字列が混じりこむと起きるというような記述が見つかりますが、どうも回避策がはっきりしません。
Instapaper自体は処理を成功させているようで201を返してきていますが、確かにX-Instapaper-Titleへ生のタイトルをUTF-8で突っ返してくるあたりが怪しいです。

HTTP/1.1 201 Created
Date: Sun, 01 Jul 2012 10:30:59 GMT
Server: Apache
Cache-Control: no-cache, max-age=2592000
Pragma: no-cache
X-Powered-By: a lot of coffee
Content-Location: http://dc.watch.impress.co.jp/docs/review/newproduct/20120622_541398.html
X-Instapaper-Title: "ソニーサイバーショットDSC-RX100 - デジカメWatch"
Expires: Tue, 31 Jul 2012 10:30:59 GMT
Vary: Accept-Encoding
Content-Length: 3
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: text/plain; charset=UTF-8

201

さて、この問題をエラーなしに回避することはできるでしょうか?
Addコマンドなので、例外出ようが続行、とか、Full API使いなさいよ、という考え方もあるとは思います。

追記1:
冷静に考えてみれば、RFC違反なんだからInstapaperにリポートしろよ、って話ですかね...。

ウォッチ

この質問への回答やコメントをメールでお知らせします。