帮助中心 >  技术知识库 >  网站相关 >  程序开发 >  php利用curl模拟post登录,传递cookie获取数据

php利用curl模拟post登录,传递cookie获取数据

2019-04-08 10:08:22 13667

一般我们会用curl抓取其他网站的数据,不过一些网站会设置成登录后才可以获取数据,这样一来我们就需要利用curl模拟登录保存cookie,并且传递cookie伪装和网站建立通信,获取到数据。


curl模拟post登录

/**

 * 模拟post登录

 * @param   string  $url  登录地址

 * @param   string  $post  登录参数

 * @param   string  $cookie cookie文件地址

 * @return mixed

 */

function curl_login($url, $post, $cookie){

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, $url);

    curl_setopt($ch, CURLOPT_HEADER, false);

    curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json; charset=utf-8', 'Content-Length:' . strlen($post)]

    );

    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);

    curl_setopt($ch, CURLOPT_POSTFIELDS, $post);         //提交方式为post,数据为json格式的。

    curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);

    $b = curl_exec($ch);

    curl_close($ch);

    return $b;

}

调用示例:

$cookie = '/login_cookie.txt';

//模拟登录

curl_login("http://www.landui.com/api/login", json_encode(['account' => 'xxx', 'password' => 'xxx']) ,$cookie);

获取cookie

/**

 * 获取cookie

 * @param string  $url  登录地址

 * @param string  $cookie cookie文件地址

 * @return mixed

 */

function curl_cookie($url, $cookie) {

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, $url);

    curl_setopt($ch, CURLOPT_HEADER, 0);

    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);

    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);

    $a = curl_exec($ch);

    curl_close($ch);

    return $a;

}

调用示例:

$cookie = '/login_cookie.txt';

//生成口令

curl_cookie("http://www.landui.com/api/login", $cookie);

模拟get获取数据

/**

 * 模拟get获取数据

 * @param $url

 * @param $cookie

 * @return mixed

 */

function curl_get($url, $cookie) {

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_ENCODING, "gzip"); //指定gzip压缩

    curl_setopt($ch, CURLOPT_URL, $url);

    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; .NET CLR 3.5.21022; .NET CLR 1.0.3705; .NET CLR 1.1.4322)');

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  //返回数据不直接输出

    curl_setopt($ch, CURLOPT_REFERER, 'http://www.landui.com/static/index.html');//来路模拟

    //curl_setopt($ch, CURLOPT_HOST, '');

    curl_setopt($ch, CURLOPT_HEADER, false);

    curl_setopt($ch, CURLOPT_HEADER, 0);

    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);

    $data = curl_exec($ch);

    curl_close($ch);

    return $data;

}

调用示例:

$cookie = '/login_cookie.txt';

//获取礼包

$content = json_decode(curl_get("http://www.landui.com/api/customermobile?customerMobile=".$mobile, $cookie), true);

模拟post获取数据

/**

  模拟post获取数据

  @param $url

  @param $post

  @param $cookie

  @return mixed

 */

function curl_post($url, $post, $cookie) {

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_ENCODING, "gzip"); //指定gzip压缩

    curl_setopt($ch, CURLOPT_URL, $url);

    curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json; charset=utf-8', 'Content-Length:' . strlen($post)]);

    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; .NET CLR 3.5.21022; .NET CLR 1.0.3705; .NET CLR 1.1.4322)');

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  //返回数据不直接输出

    curl_setopt($ch, CURLOPT_POSTFIELDS, $post);         //提交方式为post

    curl_setopt($ch, CURLOPT_REFERER, 'http://www.landui.com/static/index.html');//来路模拟

    curl_setopt($ch, CURLOPT_HEADER, false);

    curl_setopt($ch, CURLOPT_HEADER, 0);

    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);

    $data = curl_exec($ch);

    curl_close($ch);

    return $data;

}

调用示例:

$cookie = '/login_cookie.txt';

//获取数据

$ressult = curl_post("http://www.landui.com/api/exchangecode/verifycode", json_encode($post), $cookie);


提交成功!非常感谢您的反馈,我们会继续努力做到更好!

这条文档是否有帮助解决问题?

非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

在文档使用中是否遇到以下问题: