iT邦幫忙

0

PHP CURL 無法正確

請教使用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;
咖咖拉 iT邦新手 1 級 ‧ 2020-01-04 14:54:53 檢舉
把PHP顯示的錯誤貼上
比較好處理

原本都好好的
突然出問題的話 API的問題居多
tsaipowun iT邦新手 5 級 ‧ 2020-01-04 22:36:40 檢舉
沒有錯誤,也沒有得到正確的資料,
爬蟲除了header寫入與cookie外,還有其他的資料需要給API判斷嗎?
還是我寫的header有誤?

2 個回答

0
rogeryao
iT邦高手 1 級 ‧ 2020-01-03 10:08:25

curl 的版本要更新或安裝較新版的 PHP (php-7.4.0-nts-Win32-vc15-x86 ok)

tsaipowun iT邦新手 5 級 ‧ 2020-01-03 11:46:55 檢舉

目前查詢version是 7.66.0

0
I code so I am
iT邦研究生 4 級 ‧ 2020-01-04 23:52:41

可用fiddler查問題。

看更多先前的回應...收起先前的回應...
tsaipowun iT邦新手 5 級 ‧ 2020-01-05 09:49:36 檢舉

我是直接用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),抓太快,就會抓不到資料。

tsaipowun iT邦新手 5 級 ‧ 2020-01-09 07:35:08 檢舉

回應的response code 是200正確,只是回覆的json不是預期中的資料(code=-1),傳輸過程沒問題,猜想是給的資料有錯誤,資料除了POST的資料、COOKIE跟HEADER外,還有其他防爬蟲的方式嗎?

有一大堆的方法,如 session、OCX、Popup login form、captcha、redirect..., 我爬了7、8年,快爬不動了。/images/emoticon/emoticon20.gif

我要發表回答

立即登入回答