0

https://www.google.com/reader/api/0/stream/contents/feed/ {FEED URL}?ot=1253052000&rへの通常の GET リクエストを使用して、Google リーダーの特定のサブスクリプションに属するフィードを取得しようとしています。 =n&xt=user/-/state/com.google/read&n=20&ck=1255646178892&client=myApplication.

URL にhttp://www.aljazeera.com/Services/Rss/?PostingId=2007731105943979989などのクエリ文字列が含まれている場合を除いて、すべて問題ないようです。エラーが発生し、応答を確認すると、「要求された URL '/reader/api/0/stream/contents/feed/{SUBSCRIPTION URL MINUS QUERY STRING}' がこのサーバーで見つかりませんでした」と表示されます。どういうわけか、サブスクリプション URL とリクエスト URL のクエリ文字列が混同されていることがわかっています。どうすればこれを回避できますか?

4

1 に答える 1

1

フィードURLをURLエンコードします。特殊文字をクエリ操作に干渉しない文字のシーケンスに変換するエンコーディングがURLにあります。人々がスペースを使うとき、あなたはこれをよく見ます、あなたのブラウザは置くでしょう%20

C#では、UrlEncodeを見つけることができる場所はHttpUtility.UrlEncodeです。

アップデート

はい、WebUtility.UrlEncode(string url)メソッドも機能します。

URLに挿入したいテキストがあるが、それがURLの動作/解析に影響を与えたくない場合は、挿入したいテキストをエンコードするという考え方です。明らかに、あるURLを別のURLに挿入すると、望ましくない結果が生じる可能性が高いため、{FEEDURL}に挿入するURLはエンコードが必要なものです。

例:

// The ?, &, and :// will likely cause some interesting parsing by
// the target webserver.
var feedUrl = "http://site.com/url?a=1&b=2";

var serviceUrl = "https://www.google.com/reader/api/0/stream/contents/feed/{0}?ot=1253052000&r=n&xt=user/-state/com.google/read&n=20&ck=1255646178892&client=myApplication";

var resultUrl = string.Format(serviceUrl, WebUtility.UrlEncode(feedUrl));

結果のURLは次のようになります。

https://www.google.com/reader/api/0/stream/contents/feed/http%3A%2F%2Fsite.com%2Furl%3Fa%3D1%26b%3D2?ot=1253052000&r=n&xt=user/-state/com.google/read&n=20&ck=1255646178892&client=myApplication

これはあなたのためにうまくいくはずです。

于 2013-02-05T16:58:05.603 に答える