我正在尝试使用通常的GET请求获取属于Google阅读器中特定订阅的Feed https://www.google.com/reader/api/0/stream/contents/feed/ {FEED URL}?ot = 1253052000& r = n& xt = user / - / state / com 。谷歌/读&安培; N = 20安培; CK = 1255646178892&安培;客户= MyApplication的
除非URL包含http://www.aljazeera.com/Services/Rss/?PostingId=2007731105943979989之类的查询字符串,否则一切似乎都很好。我收到错误,当我检查响应时,我被告知在此服务器上找不到“请求的URL'/ reader / api / 0 / stream / contents / feed / {SUBSCRIPTION URL MINUS QUERY STRING}'”。我知道订阅URL和请求URL的查询字符串混淆了。我怎么能绕过这个?
答案 0 :(得分:1)
您想要Url对Feed Url进行编码。在url中有一个编码,可以将任何特殊字符转换为不会干扰查询操作的字符序列。当人们使用空格时你会看到很多,你的浏览器会放%20
。
在C#中,我知道找到UrlEncode的地方是HttpUtility.UrlEncode
是的,WebUtility.UrlEncode(string url)方法也可以。
这个想法是,当你想要插入一个url的文本时,你不希望它影响你的url的行为/解析,你编码你想要插入的文本。显然,将一个网址插入另一个网址可能会导致不良后果,因此您在{FEED网址}中输入的网址是需要编码的网址。
示例:
// 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
哪个应该适合你。