請教使用php curl做X皮的自動下架商品,原本正常還沒問題,這幾天無法自動處理
是哪邊沒有寫好嗎?
$curlPost="{\"product_id_list\":[3408714903]}";
$USERAGENT="Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Mobile Safari/537.36";
$aHeader=array(
'accept: application/json, text/plain, */*',
'content-Length:32',
// 'accept-encoding: gzip, deflate, br',
'accept-language: zh-TW,zh;q=0.9,en-US;q=0.8,en;q=0.7',
'content-type: application/json;charset=UTF-8',
'origin: https://seller.shopee.tw',
'referer: https://seller.shopee.tw/portal/product/list/all?page=1&search=name&keyword=A146009L',
'sc-fe-ver: v200102-fulfillment',
'sec-fetch-mode: cors',
'sec-fetch-site: same-origin'
);
$url="https://seller.shopee.tw/api/v3/product/delete_product/?version=3.1.0&SPC_CDS=2524edb5-44dd-411d-ae14-b2a32d56ce22&SPC_CDS_VER=2";
$cookie_txt = dirname(__FILE__) . "/shopee_cookie.txt";
$ch = curl_init(); //開啟通路
curl_setopt($ch, CURLOPT_URL,$url); //網址
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0); //跳過驗證SSL協定
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0); //跳過驗證SSL協定
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); //字串流
curl_setopt($ch, CURLOPT_HEADER,0); //表頭擷取
curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1); //轉址
curl_setopt($ch, CURLOPT_TIMEOUT,60); // 設置超時限制防止閉環
curl_setopt($ch, CURLOPT_USERAGENT,$USERAGENT);
curl_setopt($ch, CURLINFO_REDIRECT_TIME,50); //重定向所使用的時間
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_txt); //存放cookie
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_txt); //發出cookie
curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);//POST数据
curl_setopt($ch, CURLOPT_HTTPHEADER, $aHeader);
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器
curl_setopt($ch, CURLOPT_POST, 1); // 发送一个常规的Post请求
$a=curl_exec($ch); //執行
$info=curl_getinfo($ch);
curl_close($ch); //關閉連結
echo $a;
curl 的版本要更新或安裝較新版的 PHP (php-7.4.0-nts-Win32-vc15-x86 ok)
可用fiddler查問題。
我是直接用CHROME的開發工具,查看正常網頁丟出去的request資料有哪些,再將這些資料放入Curl的header內,不過得到的卻是不同的結果,觀念中若是Header與cookie沒錯,應該就可以抓到資料了是嘛?
也是可以啦,我兩者都用,fiddler 可以觀看response status code、Raw data or webform view。先看 response status code 是否等於 200,如果是,就可以進一步看 Raw data,看server傳回甚麼資料。
另外,我曾經遇過轉址(status code=301、302),抓太快,就會抓不到資料。
回應的response code 是200正確,只是回覆的json不是預期中的資料(code=-1),傳輸過程沒問題,猜想是給的資料有錯誤,資料除了POST的資料、COOKIE跟HEADER外,還有其他防爬蟲的方式嗎?
有一大堆的方法,如 session、OCX、Popup login form、captcha、redirect..., 我爬了7、8年,快爬不動了。