首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的个人电脑和cURL在PHP中得到不同的结果?

为什么我的个人电脑和cURL在PHP中得到不同的结果?
EN

Stack Overflow用户
提问于 2015-09-02 09:58:15
回答 1查看 54关注 0票数 0

我希望在PHP中使用cURL从imooc.com获取用户信息。因此,我编写了一个解决it.My方法的小程序,即访问www.imooc.com/space/profile/uid/{$uid} ( {$uid}是自动增量)并将数据保存到数据库中。但总有一天我会见到302 redirect。我发现imooc.com有两个重定向站点,例如,当您访问www.imooc.com/space/profile/uid/110073www.imooc.com/space/profile/uid/212328时,您会发现它们重定向到不同的站点(www.imooc.com/error/noexistswww.imooc.com/course/list)。

在我的pc和vps中,当我重定向到www.imooc.com/error/noexists时,我可以得到同样的结果,但是如果重定向到另一个站点,我的pc就可以完美地解决它,而我的vps只会什么都不做,它就不能工作。

我怎么才能重新解决这个问题?这是我的密码:

代码语言:javascript
复制
// connect to DB
$dsn = "mysql:host=localhost;dbname=tools";
$link = new PDO($dsn, 'root', 'root', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8';"));

$sql = "SELECT MAX(uid) FROM imooc";
$stmt = $link->prepare($sql);
$stmt->execute();
$lastUid = $stmt->fetch()[0];

$uid = $lastUid+1;

// I execute this script using cron every minute, so I use loop to make sure it will get 40 sites
while(($lastUid + 40) >= $uid){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "http://www.imooc.com/space/profile/uid/{$uid}");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    $output = curl_exec($ch);

    curl_close($ch);

    $str = strstr($output, "的个人详情-慕课网</title>", true);
    if ($str === false) {
        $sql = "INSERT INTO imooc(uid,username, site, learntime, experience, usersex, usercity) VALUES(:uid, :username, :site, :learntime, :experience, :usersex, :usercity)";
        $stmt = $link->prepare($sql);
        $stmt->bindParam(':uid', $uid);
        $stmt->bindValue(':username', '没有找到此人');
        $stmt->bindValue(':site', '没有该人的职业信息');
        $stmt->bindValue(':learntime', '没有找到该人的学习时间');
        $stmt->bindValue(':experience', '没有找到该人的学习经验');
        $stmt->bindValue(':usersex', '没有找到该人的性别');
        $stmt->bindValue(':usercity', '没有找到该人的城市');
        $stmt->execute();
        $uid++;
        continue;
    }

    // get user-name
    $title = strstr($str, "<title>");
    $name = substr($title, 7);

    // get user-site
    $str = strstr($output, '<span class="user-site">');
    $span = strstr($str, "</span>", true);
    $site = trim(substr($span, 24));

    // get learn-time
    $str = strstr($output, '<p class="mp-num">');
    $span = strstr($str, '</p>', true);
    $learntime = trim(substr($span, 18));

    // get user-experience
    $str = strstr($output, '<span class="mp-num">');
    $span = strstr($str, '</span>', true);
    $experience = trim(substr($span, 21));

    // get user-sex
    $str = strstr($output, '<em >');
    $span = strstr($str, '</em>', true);
    $usersex = trim(substr($span, 5));
    if ($str === false) {
        $usersex = '保密';
    }

    // get user-city
    $str = strstr($output, '<span>所在城市:</span>');
    $span = strstr($str, '</ul>', true);
    $city = strip_tags(substr($span, strlen('<span>所在城市:</span>') ) );
    $usercity = str_replace(' ', '', $city);

    // insert data into database
    $sql = "INSERT INTO imooc(uid,username, site, learntime, experience, usersex, usercity) VALUES(:uid, :username, :site, :learntime, :experience, :usersex, :usercity)";
    $stmt = $link->prepare($sql);
    $stmt->bindParam(':uid', $uid);
    $stmt->bindParam(':username', $name);
    $stmt->bindParam(':site', $site);
    $stmt->bindParam(':learntime', $learntime);
    $stmt->bindParam(':experience', $experience);
    $stmt->bindParam(':usersex', $usersex);
    $stmt->bindParam(':usercity', $usercity);
    $stmt->execute();
    $uid++;
}

我使用XAMPPV3.2.1和5.6.11版本的PHP,我的vps版本也是5.6.11。

EN

回答 1

Stack Overflow用户

发布于 2015-09-02 10:17:53

如果您只需要从有效页面(非重定向,现有的uid)获取内容,则只需检查是否发生重定向并跳过这些页面。

为此,请检查(响应头)用于响应代码(http_code)或redirect_url。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32350106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档