从 feedburner 获取(或 AJAX 获取)returns html 但 Postman returns xml
fetch (or AJAX Get) returns html but Postman returns xml from feedburner
我正在尝试在我的应用程序中检索 xml 播客提要。我遇到了一个问题,其中一个 fetch
请求我正在 returns 一个 html 文档而不是 xml 提要。奇怪的是,如果我使用 Postman 将 /GET
发送到同一个 url,它会 returns 我的 rss 提要。它似乎也适用于 SO 上的代码片段(下面的示例)。
可以在 this fiddle 看到它返回 html 文档的示例,它与下面的代码片段具有完全相同的代码。
有人能帮我理解为什么会这样吗?我觉得它可以通过设置某种请求来解决 header,也许?
更新
奇怪的是,似乎链接的 fiddle 有时会获取 xml;我认为是因为它缓存了调用。如果您在新的隐身模式 window 中打开它,它会再次获取 html。
$('#fetchXML').click(function(){
$('#xmlContent').text('Loading ...');
const feedUrl = 'https://cors-anywhere.herokuapp.com/http://feeds.wnyc.org/dearhankandjohn';
const headers = new Headers({
'X-Requested-With':'XMLHttpRequest'
});
fetch(feedUrl, headers)
.then(function(response) {
return response.text();
})
.then(function(xmlText) {
$('#xmlContent').text(xmlText);
})
.catch(function(err){
$('#xmlContent').text(err);
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table>
<tr>
<td><button id="fetchXML">
Fetch Feed
</button></td>
</tr>
<tr>
<td id="xmlContent"></td>
</tr>
</table>
好的,所以我终于能够通过在 fetch()
调用中将 ReferrerPolicy
设置为 no-referrer
来解决这个问题。我不是 100% 确定为什么这有效,除了这是一个 feeburner 特定的东西,他们有一个基于引荐来源类型的条件 return 政策。
TL;DR:将format
作为参数传递给URL。
https://feeds.feedburner.com/codinghorror?format=html
Feedburner returns 原始 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
我正在尝试在我的应用程序中检索 xml 播客提要。我遇到了一个问题,其中一个 fetch
请求我正在 returns 一个 html 文档而不是 xml 提要。奇怪的是,如果我使用 Postman 将 /GET
发送到同一个 url,它会 returns 我的 rss 提要。它似乎也适用于 SO 上的代码片段(下面的示例)。
可以在 this fiddle 看到它返回 html 文档的示例,它与下面的代码片段具有完全相同的代码。
有人能帮我理解为什么会这样吗?我觉得它可以通过设置某种请求来解决 header,也许?
更新 奇怪的是,似乎链接的 fiddle 有时会获取 xml;我认为是因为它缓存了调用。如果您在新的隐身模式 window 中打开它,它会再次获取 html。
$('#fetchXML').click(function(){
$('#xmlContent').text('Loading ...');
const feedUrl = 'https://cors-anywhere.herokuapp.com/http://feeds.wnyc.org/dearhankandjohn';
const headers = new Headers({
'X-Requested-With':'XMLHttpRequest'
});
fetch(feedUrl, headers)
.then(function(response) {
return response.text();
})
.then(function(xmlText) {
$('#xmlContent').text(xmlText);
})
.catch(function(err){
$('#xmlContent').text(err);
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table>
<tr>
<td><button id="fetchXML">
Fetch Feed
</button></td>
</tr>
<tr>
<td id="xmlContent"></td>
</tr>
</table>
好的,所以我终于能够通过在 fetch()
调用中将 ReferrerPolicy
设置为 no-referrer
来解决这个问题。我不是 100% 确定为什么这有效,除了这是一个 feeburner 特定的东西,他们有一个基于引荐来源类型的条件 return 政策。
TL;DR:将format
作为参数传递给URL。
https://feeds.feedburner.com/codinghorror?format=html
Feedburner returns 原始 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