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

一般我们会用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://xxx.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://xxx.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://xxx.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://xxx.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://xxx.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://xxx.com/api/exchangecode/verifycode", json_encode($post), $cookie);

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要通过 PHP 模拟登录并获取 Cookie 信息,您需要使用 CURL 库来发送 HTTP 请求并处理响应。以下是一个基本的示例: ```php $username = "your_username"; $password = "your_password"; // 登录页面 URL $login_url = "https://example.com/login.php"; // 设置 CURL 选项 $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $login_url); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, "username=$username&password=$password"); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); // 发送登录请求并获取响应 $response = curl_exec($curl); // 获取 Cookie 信息 preg_match_all('/^Set-Cookie:\s*([^;]*)/mi', $response, $matches); $cookies = array(); foreach($matches[1] as $item) { parse_str($item, $cookie); $cookies = array_merge($cookies, $cookie); } // 输出 Cookie 信息 print_r($cookies); // 关闭 CURL curl_close($curl); ``` 在上面的代码中,您需要将 `$username` 和 `$password` 替换为您的用户名和密码,将 `$login_url` 替换为登录页面的 URL。然后,使用 CURL 发送 POST 请求,将用户名和密码作为参数传递。设置 `CURLOPT_RETURNTRANSFER` 选项以获取响应内容,设置 `CURLOPT_FOLLOWLOCATION` 选项以跟随重定向。最后,使用正则表达式从响应头中提取 Cookie 信息,并将其存储在 `$cookies` 数组中。最后,您可以使用 `print_r()` 函数输出 Cookie 信息。 请注意,上面的示例仅适用于基本的 HTTP 认证,如果您的网站使用了更复杂的认证方式(如 OAuth、JWT 等),则需要进行更高级的处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值