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

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

问题描述:

我使用PHP和cURL查询结果列表的API。如何使用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); 

预期输出(从扬鞭文档):

"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" 
+0

看到这个答案:https://*.com/a/41135574/2872038 –

+0

如果头值实际上是空的,我会猜测没有后续的结果集。 –

+0

感谢您对此的帮助 - 我尝试了这一点,它很好地将每个头放到一个数组中,使得使用起来更容易,谢谢!但不幸的是,分页链接仍然是空白的(我得到了〜2000结果列表中的前3个,并且在Swagger中做同样的查询,我确实得到了分页链接)。 'code'[link] =>数组 ( [0] =>; rel =“next” ) –

好吧,我到了那里 - 为了保全标题中的网址,包含在尖括号内,我需要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