Tình hình là mình đang crawler 1 ít dữ liệu từ amazon, có xài qua proxy instantproxies nhưng rất kì lạ 1 cái là mình chạy ở localhost thì craw ngon lành, nhưng đem code đó lên vps thì bị dính captcha. Thử 10 lần vẫn y như vậy. Ko biết bị lỗi gì ae có gặp phải cho mình xin ý kiến Đây là code mình craw, dùng cả trên vps và local
Trước mình có test thử 1 số host - dùng proxy nó không báo lỗi nhưng bỏ qua (skip) proxy. Admin thử dùng đoạn code đó request đến ip[.]pavietnam[.]vn để thử xem ra ip của proxy hay vps.
Request tới url cậu đưa thì cả localhost và vps đều ra ip của proxy. @@. Mình củng ko hiểu vì sao lại lạ kì như vậy nữa
Code: curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9')); Mình thử qua được
Nếu request bình thường ko dùng proxy thì qua amazon ngon lành, bật proxy lên thì mới bị dính captcha. Proxy private nên chắc ko có thánh nào đang xài chung mình đâu. Nên mới đau đầu ấy
Code: https://www.amazon.com/gp/profile/amzn1.account.AFWQGIAEPHI3ZRGO7VQ3QHCGOPBQ Url đó mình crawl luôn bị captcha, thêm dòng trên thì mình qua được, nguyên code của mình (proxy bên dưới là public) : Code: <?php $url = 'https://www.amazon.com/gp/profile/amzn1.account.AFWQGIAEPHI3ZRGO7VQ3QHCGOPBQ'; $ch = curl_init(); curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_PROXY, '118.27.31.50:3128'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:54.0) Gecko/20100101 Firefox/58.0'); curl_setopt($ch, CURLOPT_URL, trim($url)); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9')); $rsData = curl_exec($ch); curl_close($ch); echo "<!--{$rsData}-->"; ?>
Thử dùng code của thím thì bị y chang tình trạng mình gặp luôn \ Vẫn có cách khác để giải quyết nhưng thật sự ko hiểu là vì sao proxy instantproxies lại gặp vấn đề thôi, thằng đó là proxy private mà sao lại block nhỉ
@Hoa Mãn Lâu code như này là xong. Anh test cả link của em lẫn link product đều chạy tốt. Nếu không dùng curl_setopt($ch,CURLOPT_HTTPHEADER,array('X-FORWARDED-FOR: '.$proxy)); thì sẽ bị Captcha hoặc màn hình Sorry với con Cờ Hó Bỏ đoạn code này đi: curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9')); Full code như bên dưới, em copy về thay $proxy = 'A.B.C.Dort'; thành giá trị proxy của em mà test. Code: <?php $proxy = 'A.B.C.D:Port'; $url = 'https://www.amazon.com/gp/profile/amzn1.account.AFWQGIAEPHI3ZRGO7VQ3QHCGOPBQ'; //$url = 'https://www.amazon.com/dp/B0015R3AAO'; $ch = curl_init(); curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_PROXY, $proxy); curl_setopt($ch,CURLOPT_HTTPHEADER,array('X-FORWARDED-FOR: '.$proxy)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:54.0) Gecko/20100101 Firefox/58.0'); curl_setopt($ch, CURLOPT_URL, trim($url)); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9')); $rsData = curl_exec($ch); curl_close($ch); echo "<!--{$rsData}-->"; ?>
Lý do: do cấu hình nginx/apache của em không dấu header mà show luôn ra real IP. Amazon nó check ra real IP là máy em --> không có trong blacklist --> nó return kết quả (trên laptop của anh vẫn bị lỗi khi chưa dấu X-FORWARDED-FOR) Khi em chạy trên VPS --> Amazon check ra real IP của VPS thấy CÓ trong blacklist --> bật captcha Anh đoán thế nhưng khả năng là đúng thế (cao siêu hơn thì anh ko biết, hóng mấy anh em trùm networking vào giải thích chi tiết hơn) Còn nếu em hỏi tại sao instanproxies nó ko dấu hay làm gì đó thì anh chịu. Và nếu em chạy code của anh ko dc thì anh cũng chịu
A lại nói đúng. . E định comment vậy mà chưa test khi @Hoa Mãn Lâu post. Nên ko dám comment. Giờ mới test cũng ngon như của a.
E copy y nguyên code của anh Andy bỏ lên con vps chỉ thay mỗi cái url product của aws với proxy nhưng vẫn ra tấm hình con cờ hó. Ko lẽ proxy của e có vấn đề nhỉ
@Hoa Mãn Lâu kkk kì vậy. Em đã add IP của VPS vào InstantProxies chưa? Đây là màn hình anh crawl product của Amz trên VPS của anh (link product trong code trước ($url = 'https://www.amazon.com/dp/B0015R3AAO';) Lưu ý :em nên dùng link kiểu: https:// www. amazon. com/... nhé, vì dùng link kiểu khác thì Amazon redirect sẽ redirect về https:// www. amazon .com/... sẽ gây error Test lại nếu vẫn không được thì em ib IP VPS cho anh (ib Telegram nhé), anh sẽ add vào cPanel của InstantProxies rồi anh đưa em vài proxy của anh xài thử xem được không.
Tình hình là e đã fix xong rồi ạ, Vấn đề đơn giản là do phiên bản xampp xài php trên máy local của e là php 5.6 còn bên vps là php 7.2 nên code bên local chạy ngon bên vps ko chạy dc, Xong down php từ 7.2 xuống 5.6 thì 2 bên chạy ngon lành. Củng ko hiểu vì sao ở bản 7.2 mới nhất thì lại ko chạy ngon lành dc. @@ Rất cảm ơn mn đã nhiệt tình hỗ trợ ạ
cho mình hỏi là thằng amazon này crawl qua ip, mỗi ip tầm bao nhiểu request phải đổi vậy (hoặc bao nhiêu phút). và khi nó đưa ip vào blacklist thì nó khoá luôn hay là sau xx time nào đó nó sẽ mở lại vậy. Thanks các bác
Nó khóa rồi sẽ thả nhưng tầm 5-10 phút gì đó, Còn cái vụ limit thì chưa test nhưng chắc tầm 1 phút dc chục cái request ấy, có lúc request liên tục là ăn có lúc request có 1-2 cái củng bị dính limit. nên ko rõ nó check theo cơ chế nào nữa