php检测抓包,PHP代码实现抓包curl解析

40dd46639b6dbb0f5b71d8255e8b8148.png

抓包工具charles抓取的请求curl,是这样:

curl -H ':method: POST' -H ':path: /client.action?functionId=signInCouponCenter&clientVersion=8.3.4&build=70302&client=android&d_brand=HUAWEI&d_model=JKM-AL00bxxxxx' -H ':authority: api.m.jd.com' -H ':scheme: https' -H 'cookie:xxxxx' -H 'charset: UTF-8' -H 'accept-encoding: gzip,deflate' -H 'cache-control: no-cache' -H 'content-type: application/x-www-form-urlencoded; charset=UTF-8' -H 'content-length: 95' -H 'user-agent: okhttp/3.12.1' --data-binary "body=%22%7D&" 'https://api.m.jd.com/client.action?functionId=signInCouponCenter&clientVersion=8.3.4&build=70302&client=android&d_brand=HUAWEI&d_model=JKM-AL00bxxx'

拿到这个curl我可以直接在服务器跑这个curl命令,现在我想使用php做脚本,我希望可以便利的转换,不需要我自己写太多代码爬取,写了下如下方法,后面去爬取内容两行代码轻松搞定,舒畅!

//linux curl 解析

public function curlParse( $curls ){

$curls = trim($curls,'curl');

$h = explode(' -H ',$curls);

$h = array_filter($h);

$data = array_pop($h);

$d = explode(' --data-binary ',$data);

$h[] = array_shift($d);

$header = [];

$actions = [];

foreach ($h as $k=>$v){

$v = trim($v,"'");

$t = explode(' ',$v);

$key = array_shift($t);

if( in_array($key,[':path:',':method:','authority','scheme']) ){

$actions[trim($key,':')] = implode(' ',$t);

unset($h[$k]);

}

$header[trim($key,':')] = implode(' ',$t);

}

$d = explode(' ',array_pop($d));

$submitData = trim($d[0],"\"");

$url = trim(array_pop($d),"'");

$method = $actions['method'];

return httpRequest($url,$submitData,$header,$method);

}

//请求

public function httpRequest($url,$data,$header=[],$method){

if ( empty($header[0]) ) {

$headers = [];

foreach ($header as $k => $v){

$headers[] = "{$k}: {$v}";

}

$header = $headers;

}

$curl = curl_init();

$curlSet = [

CURLOPT_URL => $url,

CURLOPT_RETURNTRANSFER => true,

CURLOPT_ENCODING => "",

CURLOPT_MAXREDIRS => 10,

CURLOPT_TIMEOUT => 30,

CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,

CURLOPT_HTTPHEADER => $header

];

if( $method=='POST' ){

$curlSet[CURLOPT_CUSTOMREQUEST] = "POST";

$curlSet[CURLOPT_POSTFIELDS] = $data;

}

curl_setopt_array($curl,$curlSet);

$response = curl_exec($curl);

$err = curl_error($curl);

curl_close($curl);

if ($err)

throw new \Exception("cURL Error #:" . $err);

$response = json_decode($response,1);

return $response;

}

$curl = "curl -H ':method: POST' -H ':path: /client.action?functionId=signInCouponCenter&clientVersion=8.3.4&build=70302&client=android&d_brand=HUAWEI&d_model=JKM-AL00bxxxxx' -H ':authority: api.m.jd.com' -H ':scheme: https' -H 'cookie:xxxxx' -H 'charset: UTF-8' -H 'accept-encoding: gzip,deflate' -H 'cache-control: no-cache' -H 'content-type: application/x-www-form-urlencoded; charset=UTF-8' -H 'content-length: 95' -H 'user-agent: okhttp/3.12.1' --data-binary "body=xxx" 'https://api.m.jd.com/client.action?functionId=signInCouponCenter&clientVersion=8.3.4&build=70302&client=android&d_brand=HUAWEI&d_model=JKM-AL00bxxx'";

curlParse($curl);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值