联系API时出现错误的URL编码

URL encoding giving errors when contacting API

本文关键字:URL 编码 错误 API 联系      更新时间:2023-09-26

我正在做一个学校项目,试图为《纽约时报》文章搜索API创建一个搜索功能。我对他们的一个搜索过滤器有问题,因为当我运行函数时,我得到了错误400,因为某种原因,它无法读取url编码。有趣的是,如果我用=替换所有的%3D,用&在我自己的URL中,它起作用,我可以看到API正确响应。

if($('#date1').is(':checked')) {date="day_of_week&begin_date=18500101&end_date=19000101";}
if($('#date2').is(':checked')) {date="day_of_week&begin_date=19000101&end_date=19500101";}
if($('#date3').is(':checked')) {date="day_of_week&begin_date=19500101&end_date=20000101";}
if($('#date4').is(':checked')) {date="day_of_week&begin_date=20000101&end_date=20150101";}
$.getJSON('http://api.nytimes.com/svc/search/v2/articlesearch.json',
{'api-key': 'XXXXXXXXXXXXXXXXXXXXXXX',
'fq': 'headline:("'+sogestreng.toLowerCase()+'")'+" AND "+finalSections,
'facet_field': date},

此代码返回"http://api.nytimes.com/svc/search/v2/articlesearch.json?api-key=XXXXXXXXXXXXXXXXXXXXXX;fq=标题%3A(%22dubai%22)+AND+section_name。包含%3A(/22Sports%2C+%22)&facet_field=星期%26begin_date%3D20000101%26end_date%3D50101"

而如果我手动替换url编码的最后一部分并在浏览器中打开它,我会得到我想要的结果。

我通过更改来做到这一点:

"&facet_field=星期%26begin_date%3D20000101%26end_date%3D50101"

"&facet_field=day_of_week&begin_date=200000101&end_date=20150101"

同样需要澄清的是,"fq"标准非常适用,它只是facet_field。

这怎么可能?有什么解决办法吗?

您正在将多个字段的描述塞进一个字段的值中。要获得您想要的结果,请尝试:

var begin_date, end_date;
if($('#date1').is(':checked')) {      
  begin_date = 18500101;
  end_date = 19000101;
}
else if($('#date2').is(':checked')) {
  // etc.
}

$.getJSON('http://api.nytimes.com/svc/search/v2/articlesearch.json',
  {
    'api-key': 'XXXXXXXXXXXXXXXXXXXXXXX',
    'fq': 'headline:("'+sogestreng.toLowerCase()+'")'+" AND "+finalSections,
    'facet_field': 'day_of_week',
    'begin_date': begin_date,
    'end_date': end_date
  },
// ...