如何使用PHP cURL从API获取链接头(用于分页)

时间:2017-09-16 18:16:23

标签: php api curl pagination header

我正在使用PHP和cURL查询API以获取结果列表。

为了启用分页,API会在标题中返回指向结果的下一页和上一页的链接,作为HTTP链接标题。 https://www.w3.org/wiki/LinkHeader

当我print_r从curl_exec返回的对象时,标题中的链接(有角度的括号之间)是空的。通过查看Swagger文档,我验证我应该返回链接。 (见例)。在Swagger文档中,链接在尖括号内返回 - 是否存在关于cURL获取/返回标题的方式,这意味着尖括号内的内容丢失了?

源代码:

$curl = curl_init("https://api.mendeley.com/datasets?limit=3");
curl_setopt($curl, CURLOPT_HEADER, 1); 
curl_setopt($ch,CURLOPT_ENCODING , "gzip");
$rest = curl_exec($curl);
print_r($rest);

预期输出(来自Swagger文档):

"link": "<https://api.mendeley.com/datasets?marker=0027ea1f-bec6-4581-a967-9a8c75dfba5f&limit=3&fields=results.id&reverse=false&_=1505585347125&order=asc>; rel=\"next\"",

实际输出:

Link: ; rel="next" 

2 个答案:

答案 0 :(得分:0)

好的,我到了那里 - 为了保留尖括号中包含的标题中的URL,我需要 URL编码来自curl_exec的输出:

$rest = rawurlencode(curl_exec($ch));

示例输出:

Link%3A%20%3Chttps%3A%2F%2Fapi.mendeley.com%2Fdatasets%3Fmarker%3Db6ea8b2a-c4fa-4a84-989a-66cf7801abbf%26limit%3D3%26sort%3Dpublish_date%26fields%3Dresults.id%26reverse%3Dfalse%26order%3Ddesc

答案 1 :(得分:0)

具有这样的代码:

$content = <<<HTML
Link: <meta.rdf>; rel=meta

Content.
HTML;

print_r($content);

在浏览器中完全显示:

Link: ; rel=meta Content.

因为尖括号内的内容被认为是标签,而不呈现。如果使用“ crtl + u”快捷方式查看源代码,则会看到:

Link: <meta.rdf>; rel=meta

Content.

这意味着一切正常,并且您拥有所需的一切。

我敢打赌,这是你的情况。