我正在尝试在我的应用程序中检索xml播客feed。我遇到了一个问题,其中我发出的一个getUserLocation
请求返回了一个html文档而不是xml feed。奇怪的是,如果我将// inside didFinishLaunchingWithOptions
UNUserNotificationCenter.current().requestAuthorization(options: [.badge, .alert, .sound]) { (granted, error) in
if granted {
// this is the use case of the function I am trying to write
LocationManager.shared.getLocation(completion: { location in
// fetches the country from given location using reverse geo-coding
LocationManager.shared.fetchCountry(from: location, completion: { country in
if country == "United States" {
let notification = LocalNotification()
notificationManager.schedule(notification: notification)
}
})
})
}
}
发送到与Postman相同的URL,它将返回rss feed。它似乎也可以与SO上的代码段一起使用(下面的示例)。
可以在this fiddle上看到返回html文档的示例,其代码与下面的代码段完全相同。
请问有人能够帮助我了解为什么会这样吗?我想通过设置某种请求标头来解决它,也许是这样吗?
更新 奇怪的是,看起来好像链接的小提琴有时会获取xml。我认为是因为它缓存了电话。如果您在新的隐身窗口中打开它,它将再次获取html。
fetch
/GET
答案 0 :(得分:1)
好的,所以我终于可以通过在ReferrerPolicy
调用中将no-referrer
设置为fetch()
来解决此问题。我不是100%知道为什么这行得通,除了这是收费烧录特定的事情之外,他们已经基于引荐来源网址类型制定了有条件的退货政策。
答案 1 :(得分:1)
TL; DR :在网址中传递format
作为参数。
https://feeds.feedburner.com/codinghorror?format=html
Feedburner默认返回原始XML:
HTTP/1.1 200 OK
Alt-Svc: quic=":443"; ma=2592000; v="46,43,39"
Cache-Control: private, max-age=0
Content-Encoding: gzip
Content-Type: text/xml; charset=UTF-8
但是它还会发送一个样式表,以便浏览器可以应用样式标记(查看源代码)。
以前,使用了不推荐使用的fmt
参数,现在使用format
可以要求输入html
或xml
。
https://feeds.feedburner.com/codinghorror?format=html
HTTP/1.1 200 OK
Alt-Svc: quic=":443"; ma=2592000; v="46,43,39"
Cache-Control: private, max-age=0
Content-Encoding: gzip
Content-Type: text/html; charset=UTF-8