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 的行为/解析时,您可以对要插入的文本进行编码。显然,将一个网址插入另一个网址可能会导致不良结果,因此您放入 {FEED 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));

结果网址将是:

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 回答