无法通过Axios为Scripture API设置指定请求头,无法获取纯文本经文
问题:Axios请求Scripture Bible API无法获取纯文本经文
我使用以下Axios代码调用Scripture Bible API获取经文:
import axios from 'axios'; const API = axios.create({ baseURL: 'https://api.scripture.api.bible' }); API.defaults.headers.common['api-key'] = 'MY_API_KEY'; API.defaults.headers.get['content-type'] = 'text'; API.defaults.headers.get['include-titles'] = false; API.defaults.headers.get['include-verse-numbers'] = false; export const getEnglishVerse = (verseId) => API.get(`/v1/bibles/65eec8e0b60e656b-01/verses/${verseId}`); export const getItalianVerse = (verseId) => API.get(`/v1/bibles/41f25b97f468e10b-01/verses/${verseId}`);
但最后三个配置的"请求头"并未生效,返回的仍是HTML格式的内容:
<p class="p"><span data-number="16" data-sid="JHN 3:16" class="v">16</span>Perciocchè Iddio ha tanto amato il mondo, ch'egli ha dato il suo unigenito Figliuolo, acciocchè chiunque crede in lui non perisca, ma abbia vita eterna. </p>
我需要获取纯文本格式的经文,且在Swagger中设置对应参数时可以正常生效,请问该如何正确配置?
解决方案
核心问题
你搞错了参数类型:content-type、include-titles、include-verse-numbers不是请求头参数,而是URL查询参数。这就是为什么Swagger里设置有效(Swagger会自动识别这类参数并拼到URL上),但放在Axios的headers.get里完全没用。
正确写法
把这些参数移到get请求的params选项中:
import axios from 'axios'; // 创建实例时只配置必要的请求头 const API = axios.create({ baseURL: 'https://api.scripture.api.bible', headers: { 'api-key': 'MY_API_KEY' } }); // 每个请求携带查询参数 export const getEnglishVerse = (verseId) => API.get(`/v1/bibles/65eec8e0b60e656b-01/verses/${verseId}`, { params: { 'content-type': 'text', 'include-titles': false, 'include-verse-numbers': false } }); export const getItalianVerse = (verseId) => API.get(`/v1/bibles/41f25b97f468e10b-01/verses/${verseId}`, { params: { 'content-type': 'text', 'include-titles': false, 'include-verse-numbers': false } });
全局配置优化
如果所有请求都需要这些参数,可以直接在实例创建时全局配置params,避免重复代码:
const API = axios.create({ baseURL: 'https://api.scripture.api.bible', headers: { 'api-key': 'MY_API_KEY' }, // 全局默认查询参数 params: { 'content-type': 'text', 'include-titles': false, 'include-verse-numbers': false } }); // 后续请求无需再单独传参 export const getEnglishVerse = (verseId) => API.get(`/v1/bibles/65eec8e0b60e656b-01/verses/${verseId}`); export const getItalianVerse = (verseId) => API.get(`/v1/bibles/41f25b97f468e10b-01/verses/${verseId}`);
这样配置后,API会返回纯文本格式的经文内容,符合你的需求。
内容的提问来源于stack exchange,提问作者mathdx
相关产品推荐
相关产品推荐

