カール収集問題

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBオリジナル
2016-06-20 12:44:171130ブラウズ

131458.comのように、タオバオアカウントを通じてタオバオ購入者の評判をチェックする機能を実装したいです。
私のアイデアは、curl を通じてこの Web サイトからデータを収集することです。しかし、ブロックされ、役に立たない情報が返されてきました。
コードは次のとおりです:

    $parm=$data['parm']."&_=".time()."326"; //参数    $ch=  curl_init();     $uri="http://www.131458.com/handler/TaobaoInfo.ashx?";    curl_setopt($ch, CURLOPT_URL, $uri.$parm);     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);     curl_setopt($ch, CURLOPT_HEADER, 0);     curl_setopt($ch, CURLOPT_REFERER, "http://www.131458.com/");     //curl_setopt($ch, CURLOPT_HTTPHEADER, array('X-FORWARDED-FOR:125.67.52.246', 'CLIENT-IP:125.67.52.246'));      curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36 SE 2.X MetaSr 1.0"); /     $return = curl_exec($ch);       curl_close($ch);       echo $return;

ブラウザー アクセスをシミュレートし、通常のデータを収集するには、他に何を追加する必要があります。


ディスカッションへの返信 (解決策)

パッケージを手に取って見てみてはいかがでしょうか?一般に、ヘッダーで必要なものはすべて渡されます。

まず第一に、これは Chrome F12 で追跡した結果です。

カール "http://www.131458.com/handler/TaabaoInfo.ashx?tbNickInfoJson=hades&token=736905fff9ee639a4b5f46b53526434b_0b32d3aec47ad29fef2d7ddb67831933&_=1447405734036" -H "Cookie: ASP.NET_SessionId=4ki3s2yhj2555bzxlbvdqhju; Hm_lvt_ccc93bebd5e7bdc84975186073891702=1447405635; bdshare_firstime=1447405634805; Accept-Encoding: gzip、deflate、sdch" -H "Accept-Language: zh-CN,zh;q=0.8" -H "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, Gecko など) Chrome /46.0.2490.86 Safari/537.36" -H "Accept: application/json, text/javascript, */*; q=0.01" -H "Referer: http://www.131458.com/" - H "X-Requested-With: XMLHttpRequest" -H "Connection: keep-alive" --compressed

ぎこちないカール
スクリーンショット:

<?php$tb_nick_name = '1心一易';$cookie_file = './cookies.txt';$post = array(    'nick' => escape($tb_nick_name));$url = 'http://www.131458.com/handler/load.aspx/Load';// 初始化$curl = curl_init($url);$header = array();$header[] = 'Content-Type: application/json; charset=UTF-8';$header[] = 'User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36';curl_setopt($curl, CURLOPT_HTTPHEADER, $header);curl_setopt($curl, CURLOPT_HEADER, 0);curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);curl_setopt($curl, CURLOPT_POST, 1);curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($post));curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_file);curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);$response = curl_exec($curl);curl_close($curl);$d = json_decode($response)->d;$_token = md5($d . 'vvl81');$url = 'http://www.131458.com/handler/TaobaoInfo.ashx?nickCode=' . escape($tb_nick_name) . '&token=' . $_token . '_' . $d . '&_=' . time() . rand(100, 999);$curl = curl_init($url);$header = array();$header[] = 'Content-Type: application/json; charset=UTF-8';$header[] = 'User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36';curl_setopt($curl, CURLOPT_HTTPHEADER, $header);curl_setopt($curl, CURLOPT_HEADER, 0);curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_file);$contents = curl_exec($curl);curl_close($curl);/* * $preg = "/<script[^>]*?>.*?<\/script>/si"; * $newstr = preg_replace($preg,"",$contents); */echo htmlspecialchars($contents);function escape($string){    $n = $bn = $tn = 0;    $output = '';    $special = "-_.+@/*0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";    while ($n < strlen($string)) {        $ascii = ord($string[$n]);        if ($ascii == 9 || $ascii == 10 || (32 <= $ascii && $ascii <= 126)) {            $tn = 1;            $n ++;        } elseif (194 <= $ascii && $ascii <= 223) {            $tn = 2;            $n += 2;        } elseif (224 <= $ascii && $ascii <= 239) {            $tn = 3;            $n += 3;        } elseif (240 <= $ascii && $ascii <= 247) {            $tn = 4;            $n += 4;        } elseif (248 <= $ascii && $ascii <= 251) {            $tn = 5;            $n += 5;        } elseif ($ascii == 252 || $ascii == 253) {            $tn = 6;            $n += 6;        } else {            $n ++;        }        $singleStr = substr($string, $bn, $tn);        $charVal = bin2hex(iconv('utf-8', 'ucs-2', $singleStr));        if (base_convert($charVal, 16, 10) > 0xff) {            if (! preg_match("/win/i", PHP_OS))                $charVal = substr($charVal, 2, 2) . substr($charVal, 0, 2);            $output .= '%u' . $charVal;        } else {            if (false !== strpos($special, $singleStr))                $output .= $singleStr;            else                $output .= "%" . dechex(ord($string[$bn]));        }                $bn = $n;    }    return $output;}

完成度の低いカール
スクリーンショット:

<?php$tb_nick_name = '1心一易';$cookie_file = './cookies.txt';$post = array(    'nick' => escape($tb_nick_name));$url = 'http://www.131458.com/handler/load.aspx/Load';// 初始化$curl = curl_init($url);$header = array();$header[] = 'Content-Type: application/json; charset=UTF-8';$header[] = 'User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36';curl_setopt($curl, CURLOPT_HTTPHEADER, $header);curl_setopt($curl, CURLOPT_HEADER, 0);curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);curl_setopt($curl, CURLOPT_POST, 1);curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($post));curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_file);curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);$response = curl_exec($curl);curl_close($curl);$d = json_decode($response)->d;$_token = md5($d . 'vvl81');$url = 'http://www.131458.com/handler/TaobaoInfo.ashx?nickCode=' . escape($tb_nick_name) . '&token=' . $_token . '_' . $d . '&_=' . time() . rand(100, 999);$curl = curl_init($url);$header = array();$header[] = 'Content-Type: application/json; charset=UTF-8';$header[] = 'User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36';curl_setopt($curl, CURLOPT_HTTPHEADER, $header);curl_setopt($curl, CURLOPT_HEADER, 0);curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_file);$contents = curl_exec($curl);curl_close($curl);/* * $preg = "/<script[^>]*?>.*?<\/script>/si"; * $newstr = preg_replace($preg,"",$contents); */echo htmlspecialchars($contents);function escape($string){    $n = $bn = $tn = 0;    $output = '';    $special = "-_.+@/*0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";    while ($n < strlen($string)) {        $ascii = ord($string[$n]);        if ($ascii == 9 || $ascii == 10 || (32 <= $ascii && $ascii <= 126)) {            $tn = 1;            $n ++;        } elseif (194 <= $ascii && $ascii <= 223) {            $tn = 2;            $n += 2;        } elseif (224 <= $ascii && $ascii <= 239) {            $tn = 3;            $n += 3;        } elseif (240 <= $ascii && $ascii <= 247) {            $tn = 4;            $n += 4;        } elseif (248 <= $ascii && $ascii <= 251) {            $tn = 5;            $n += 5;        } elseif ($ascii == 252 || $ascii == 253) {            $tn = 6;            $n += 6;        } else {            $n ++;        }        $singleStr = substr($string, $bn, $tn);        $charVal = bin2hex(iconv('utf-8', 'ucs-2', $singleStr));        if (base_convert($charVal, 16, 10) > 0xff) {            if (! preg_match("/win/i", PHP_OS))                $charVal = substr($charVal, 2, 2) . substr($charVal, 0, 2);            $output .= '%u' . $charVal;        } else {            if (false !== strpos($special, $singleStr))                $output .= $singleStr;            else                $output .= "%" . dechex(ord($string[$bn]));        }                $bn = $n;    }    return $output;}



ありがとうございます。
今問題があります。つまり、d を取得した後、$.TO 関数が呼び出されます。これは md5(d."vvl81") です。定義だけを見ました。 . C="vvl" の場合、手動で "8" を追加しましたが、最後の "1" はどうやって知ったのでしょうか。
主な理由は、Web サイトが変更され、末尾に「1」が追加され、MD5 が Web サイト上のデータと異なるためです。


完成度の低いカール
スクリーンショット:

<?php$tb_nick_name = '1心一易';$cookie_file = './cookies.txt';$post = array(    'nick' => escape($tb_nick_name));$url = 'http://www.131458.com/handler/load.aspx/Load';// 初始化$curl = curl_init($url);$header = array();$header[] = 'Content-Type: application/json; charset=UTF-8';$header[] = 'User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36';curl_setopt($curl, CURLOPT_HTTPHEADER, $header);curl_setopt($curl, CURLOPT_HEADER, 0);curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);curl_setopt($curl, CURLOPT_POST, 1);curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($post));curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_file);curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);$response = curl_exec($curl);curl_close($curl);$d = json_decode($response)->d;$_token = md5($d . 'vvl81');$url = 'http://www.131458.com/handler/TaobaoInfo.ashx?nickCode=' . escape($tb_nick_name) . '&token=' . $_token . '_' . $d . '&_=' . time() . rand(100, 999);$curl = curl_init($url);$header = array();$header[] = 'Content-Type: application/json; charset=UTF-8';$header[] = 'User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36';curl_setopt($curl, CURLOPT_HTTPHEADER, $header);curl_setopt($curl, CURLOPT_HEADER, 0);curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_file);$contents = curl_exec($curl);curl_close($curl);/* * $preg = "/<script[^>]*?>.*?<\/script>/si"; * $newstr = preg_replace($preg,"",$contents); */echo htmlspecialchars($contents);function escape($string){    $n = $bn = $tn = 0;    $output = '';    $special = "-_.+@/*0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";    while ($n < strlen($string)) {        $ascii = ord($string[$n]);        if ($ascii == 9 || $ascii == 10 || (32 <= $ascii && $ascii <= 126)) {            $tn = 1;            $n ++;        } elseif (194 <= $ascii && $ascii <= 223) {            $tn = 2;            $n += 2;        } elseif (224 <= $ascii && $ascii <= 239) {            $tn = 3;            $n += 3;        } elseif (240 <= $ascii && $ascii <= 247) {            $tn = 4;            $n += 4;        } elseif (248 <= $ascii && $ascii <= 251) {            $tn = 5;            $n += 5;        } elseif ($ascii == 252 || $ascii == 253) {            $tn = 6;            $n += 6;        } else {            $n ++;        }        $singleStr = substr($string, $bn, $tn);        $charVal = bin2hex(iconv('utf-8', 'ucs-2', $singleStr));        if (base_convert($charVal, 16, 10) > 0xff) {            if (! preg_match("/win/i", PHP_OS))                $charVal = substr($charVal, 2, 2) . substr($charVal, 0, 2);            $output .= '%u' . $charVal;        } else {            if (false !== strpos($special, $singleStr))                $output .= $singleStr;            else                $output .= "%" . dechex(ord($string[$bn]));        }                $bn = $n;    }    return $output;}



ありがとうございます。
今問題があります。つまり、d を取得した後、$.TO 関数が呼び出されます。これは md5(d."vvl81") です。定義だけを見ました。 . C="vvl" の場合、手動で "8" を追加しましたが、最後の "1" はどうやって知ったのでしょうか。
主な理由は、Web サイトが変更され、末尾に「1」が追加され、MD5 が Web サイト上のデータと異なるためです。

コンソールでalert($.To)を実行できます;

return e = 2147483648 & a, f = 2147483648 & b, c = 1073741824
見てください参照されたjqueryファイルの最後に関数が追加されています。
これらの数字が表示されると、MD5 で暗号化されています。再度フォーマットすると、1 が追加されていることがわかります。

変更されている場合は、おそらく発見されて収集されていると思われます

この Web サイトで定義されているソング関数を見てください。
_token=$.To(data.d+) になっています。 c+ "822")+"_"+data.d

まだ同じです。

md5($d . 'vvl8221');

ここの値は毎日変わります。変更したくないです。 write it fix

_token=$.To(data.d+c+ "822")+"_"+data.d

皆さん、ありがとうございます、書き込まれました。 u012771039 に感謝します。投稿されました

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。