cURL PHP对动态URL的多个请求(循环未知时间)

时间:2019-01-01 10:20:37

标签: php curl libcurl php-curl pycurl

我是cURL的新手,我正尝试从动态URL检索数据。我仅从1个页面成功检索了数据,但是我想要从所有页面检索数据。这里的问题是页面是可变的。我不知道代码应该循环多少次才能遍历所有页面。也就是说,页面的数量因情况而异,一个好的程序就是在尽可能多的情况下都可以使用的程序。因此,将链接放在数组中并在它们上循环并不是解决此问题的正确方法。

以下是我要从中检索数据的URL的简要说明:

https://link-search.api.cj.com/v2/link-search?website-id=[Your-ID]&link-type=banner
&advertiser-ids=1513033&records-per-page=100&page-number=' . $num

您是否注意到最后一个变量$num?那应该代表将从中检索数据的页面号。在某些情况下,它可能仅为1,在其他情况下,可能是10、12或15(取决于我选择的参数,是要查看所有内容还是过滤一些信息)。

现在是问题所在。只要请求返回数据,如何动态增加该数字?如果没有,cURL应该停止运行吗?

代码如下:

<?php

$num = 1;


$curl = curl_init();

curl_setopt($curl, CURLOPT_URL, "XGET");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($curl, CURLOPT_ENCODING, "UTF-8");

curl_setopt($curl, CURLOPT_URL, 'https://link-search.api.cj.com/v2/link-search?website-id=[Your-ID]&link-type=banner&advertiser-ids=1513033&records-per-page=100&page-number=' . $num);


curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_COOKIE,true);


$result = curl_exec($curl);

$xml = simplexml_load_string($result) or die("Error: Cannot create object");

if (curl_errno($curl)) {
    echo 'Error:' . curl_error($curl);
}


curl_close($curl);

?>

1 个答案:

答案 0 :(得分:2)

您可以在函数内定义curl请求,并像下面这样调用该函数:

<?php
$GLOBALS['num'] = 1;

function curlRequest()
{

    // HERE DEFINE YOUR CURL REQUEST
    // https://yourUrl.com?$GLOBALS['num']

    if (curl_errno($curl)) {
        echo 'Error:' . curl_error($curl);
        // Exit from function in case there is no output
        return;
    } else {
        $GLOBALS['num']++;
        // Call the function to fetch NEXT page
        curlRequest();
    }
}

// Call the function for first time

curlRequest();

假设如果页码不存在,curl将触发错误,或者您可以根据所得到的结果执行条件。希望你能从中得到一些想法。

这里的主要部分是if&else。您应该在要获得的输出上实现条件,如果页面不存在,则输出将有所不同,因此在这种情况下,您可以简单地从函数中返回。