curl et erreur 403

WRInaute passionné
Bonjour,
J'ai besoin d'interroger (unitairement, je ne suis pas un robot ou un truc dans le genre) des pages sur le web

Actuellement j'utilise principalement CURL et à défaut file_get_contents : tout ça en PHP
j'ai essayé de très nombreux paramètrages dans CURL

sur de rares sites j'ai un problème 403, par exemple ce lien (ce n'est pas mon site) https:// www .king-jouet.com/jeu-jouet/jeux-societes/jeux-strategie/ref-142728-le-jeu-carcassonne.htm (j'ai mis des blancs dans 'LURL pour ne pas qu'elle soit cliquable)
j'ai un 403 que j'essaie de lire le contenu ou même juste l'entete

alors je dis pourquoi pas, mais comment cela se fait il que d'autres outils en ligne y arrivent, par exemple l'outil de lecture d'entete de webrankinfo par exemple ?
Et il me semble que cet outil utilise aussi CURL
 
Dernière édition:
WRInaute impliqué
Une réponse 403 peut avoir plein de raisons, mais j'avais une petite idée. J'ai tenté d'accéder à la page depuis mon navigateur, mais en modifiant mon user-agent, et j'ai obtenu une 403.

Moralité : y'a un filtrage suivant l'UA, ce que curl permet de modifier.

C'est vraiment une mesure de pseudo sécurité pourrie, le genre de truc qui coûte à mettre en place et à maintenir, qu peut avoir des effets de bord non prévu, et qui ne protège finalement de rien.
 
WRInaute impliqué
J'ai pas testé avec curl, juste en changeant l'user-agent de mon navigateur, et ça a retourné une 403, preuve que le site regarde cette en-tête. Il est possible que le site mette d'autre analyses d'en-tête de ce type (voir ce qui en est dit dut stockoverflow), comme le referer, l'acceptation de cookies, etc. Par exemple sur Firefox, y'a une palanquée d'en-têtes envoyés par défaut, Accept, Accept-Encoding, Accept-Language, Cache-Control, etc.

Reprends juste les valeurs par défaut de ces en-tête (pas nécessairement tous d'ailleurs), comme si tu étais le navigateur (au-delà du simple User-Agent)
 
WRInaute impliqué
Sur Firefox, quand tu fais F12 tu as accès aux outils de développement (il y a un pendant similaire pour Chrome). Dans l'onglet Réseau, tu cliques sur la requête, puis "En-têtes"' et tu cherches les en-têtes de la requête (elles sont après celles de la réponse).
 
WRInaute occasionnel
Bonsoir,

Si tu as chrome, brave ... Tu ouvres la console developer. Ctrl+shift+i quand tu es sur la page dont tu as donné l'url. Un clic droit sur l'url da la page principale dans l'onglet network. Puis, copy as curl .

chromium_curl_dev_console.png
 
WRInaute passionné
Sur Firefox, quand tu fais F12 tu as accès aux outils de développement (il y a un pendant similaire pour Chrome). Dans l'onglet Réseau, tu cliques sur la requête, puis "En-têtes"' et tu cherches les en-têtes de la requête (elles sont après celles de la réponse).
ok, merci, et comment fais tu pour changer le user-agent sur ton navigateur ?
 
WRInaute passionné
le serveur du site me répond "..quelque chose bloque le fonctionnement de javascript sur votre ordinateur.."

est ce que je peux jouer la dessus au niveau des paramètres CURL ?
 
WRInaute impliqué
comment fais tu pour changer le user-agent sur ton navigateur ?
Y'a pas mal de plug-in qui proposent ça, sur Firefox j'utilise User-Agent Switcher and Manager, ça me permet notamment de surpasser les sites qui pensent que mon navigateur est obsolète (et alors ? ça me regarde) et bloquent l'accès au site… alors que si je me fais passer pour un autre, j'ai pas de soucis.
"..quelque chose bloque le fonctionnement de javascript sur votre ordinateur.."

est ce que je peux jouer la dessus au niveau des paramètres CURL
Là ça va être plus compliqué. À ma connaissance, cURL va pouvoir récupérer des données, mais pas forcément exécuter du JS. Il y a des options plus "musclées", du genre Chrome en mode headless, c'est à dire exécuter Chrome mais sans interface.

Après regarde si le code brut récupéré de la page n'a pas déjà les infos dont tu as besoin. Autant c'est une balise <noscript> ou un truc du genre qui te bloques inutilement sur toute la page.
 
WRInaute passionné
Et bien tu copies la commande générée avec ses paramètres dans le terminal ou la console de commande (cmd) windows.
merci, j'ai fait ça et j'ai le message suivant
curl: (35) schannel: next InitializeSecurityContext failed: CRYPT_E_NO_REVOCATION_CHECK (0x80092012) - La fonction de révocation n'a pas pu vérifier la révocation du certificat
 
WRInaute passionné
aucune de vos solutions ne m'apporte de l'aide malheureusement

depuis un programme PHP, existe il une autre méthode que CURL pour aller lire (comme un utilisateur) une page HTML sur un autre site ?
 
WRInaute accro
Quand tu vois que lors du premier accès à ton url en exemple, je me suis pris un 403 de geo.captcha-delivery.com/captcha ^^
 
WRInaute passionné
et cette URL :
Code:
https://www.smythstoys.com/fr/fr-fr/jouets/jouets-prescolaires/minnie-mouse/minnie-mouse-coffret-fashion-25-pieces/p/218813
 
WRInaute impliqué
De ce que tu indiques WRI lit juste l'en-tête, toi tu en veux "plus" : interpréter du contenu JS.

Avec Puppeteer, ça devrait être possible, il existe un port sur PHP (PuPHPETEER, le dépôt originel n'est plus maintenu, mais y'a des forks), ça nécessité Node en plus de PHP.
 
WRInaute accro
et cette URL :
Code:
https://www.smythstoys.com/fr/fr-fr/jouets/jouets-prescolaires/minnie-mouse/minnie-mouse-coffret-fashion-25-pieces/p/218813
Avec cURL j'obtiens ceci :
HTML:
<html style="height:100%"><head><META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW"><meta name="format-detection" content="telephone=no"><meta name="viewport" content="initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><script src="/mbit-And-Dirers-him-Face-and-sure-such-Parry-qui" async></script><script type="text/javascript">if (sessionStorage) { sessionStorage.setItem('distil_referrer', document.referrer); }</script></head><body style="margin:0px;height:100%"><iframe id="main-iframe" src="/_Incapsula_Resource?SWUDNSAI=31&xinfo=13-31339115-0%20PNNN%20RT%281732712636537%20102%29%20q%280%20-1%20-1%200%29%20r%280%20-1%29%20B12%2814%2c0%2c0%29%20U18&incident_id=1176000190061175494-139622364598502605&edet=12&cinfo=0e000000b6e8&rpinfo=0&cts=h1v14V7IYdFr5Z%2bXf8V64glIpI8vMRrFRmporkemvF7mU4UGDnczB0svRN4XQOmR&mth=GET" frameborder=0 width="100%" height="100%" marginheight="0px" marginwidth="0px">Request unsuccessful. Incapsula incident ID: 1176000190061175494-139622364598502605</iframe></body></html>


Avec wget :
HTML:
<html>
<head>
<META NAME="robots" CONTENT="noindex,nofollow">
<script src="/_Incapsula_Resource?SWJIYLWA=5074a744e2e3d891814e9a2dace20bd4,719d34d31c8e3a6e6fffd425f7e032f3">
</script>
<body>
</body></html>

C'est Incapsula qui empêche le scraping, pistes à explorer pr contourner :
https://www.zenrows.com/blog/incapsula-bypass


Comme @emualliug le suggère, je tenterais avec Puppeteer (pas d'install sous la main actuellement pour tester).
 
Dernière édition:
WRInaute accro
Bon j'ai testé vite fait, Puppeteer arrive à faire un screenshot de
Code:
https://www.smythstoys.com/fr/fr-fr/jouets/jouets-prescolaires/minnie-mouse/minnie-mouse-coffret-fashion-25-pieces/p/218813
donc ça dois fonctionner pour scrapper
 
WRInaute passionné
je suis toujours sur mon problème, 1 seul de mes concurrents arrivent à avoir des informations sur les pages produits URL des sites marchands :
ce que je recherche comme information à Minima :
-Nom du produit : souvent dans TITLE ou les META
  • image du produit : souvent dans META
  • description produit : META description
  • facultatif : prix

Mon concurrent arrive à avoir ces informations depuis peu (hors prix) sans avoir fait de partenarait avec ces sites marchands
et il n'est jamais bloqué (j'ai fait bcp de test) contrairement à mon serveur (et ceux des autres concurrents)

après moulte réflexion, je pense donc qu'il prend ces informations ailleurs, ou alors qu'ils demandent à un autre service (qui a pate blanche auprès des sites marchands) de le faire pour lui


Une idée où je pourrais trouver ces informations sans aller sur le site marchand en direct ?
 
WRInaute impliqué
De base, Puppeteer n'est qu'une API qui permet de contrôler un navigateur headless. Si l'utilisateur "humain" est soumis à un captcha, le navigateur headless l'est aussi.

Mais en cherchant "puppeteer captcha" tu trouves des propositions : cette discussion sur stackoverflow évoque puppeteer-extra-plugin-recaptcha qui semble reposer sur un service payant (2captcha), mais avec un coût assez dérisoire, à part Arkose, on est en dessous de 3€ / 1000.
 
WRInaute passionné
j'ai donc utilisé puppeteer (j'ai fait aussi des test avec puppeteer-extra et son plugin stealth) pour essayer de résoudre mes problèmes
c'est plutot pas mal parceque j'ai résolu le scraping sur plusieurs sites, mais il me reste toujours 2 sites qui résistent (ceux qui m'interessent le plus)
je me dis que leur protection est trop forte et que je devrais laisser tomber, mais mon concurrent principal y arrive lui
@spout serait tu pret à relever le défi (contre rémunération si résultat) ? si ok on en parle en MP
 
Nouveau WRInaute
j'ai donc utilisé puppeteer (j'ai fait aussi des test avec puppeteer-extra et son plugin stealth) pour essayer de résoudre mes problèmes
c'est plutot pas mal parceque j'ai résolu le scraping sur plusieurs sites, mais il me reste toujours 2 sites qui résistent (ceux qui m'interessent le plus)
je me dis que leur protection est trop forte et que je devrais laisser tomber, mais mon concurrent principal y arrive lui
@spout serait tu pret à relever le défi (contre rémunération si résultat) ? si ok on en parle en MP

Par curiosité c'est quoi les sites qui détectent la connexion de puppeteer ?
 
WRInaute passionné
je viens de découvrir qu'ils existent des sociétés proposant de faire le scraping pour moi via des API.
j'ai repéré scrapestack par exemple

avez-vous déjà utilisé ce genre de services ? qu'en pensez-vous svp ?
 
WRInaute passionné
Tout à fait par hasard je viens de voir passer ceci sur Twitter/X : https://github.com/D4Vinci/Scrapling
tout d'abord merci

MAis je ne souhaite plus héberger moi même une solution de scraping (de plus ne n'utilise pas python mais PHP)
EN effet je souhaite trouver une service (plutot SaaS) afin de ne pas à avoir à maintenir cette solution.

Pour info , j'ai testé les services de scraping de Scrapestack et de ScaperAPi qui ont tous les 2 réussi à me renvoyer les données que je souhaitais (grace essentiellement à leur PROXY Premium)
Le seul problème est le temps de réponse de l'ordre de 1 minutes pour les sites avec une forte protection (mais c'est ceux qui m'intéressent) et ce temps de réponse n'est pas viable pour moi

JE vais donc maintenant tester mon CURL (de base) avec un sercie essentiellement de PROXY : si vous avez des noms à me donner je suis preneur
 
WRInaute passionné
sinon je reviens sur une de mes premières questions :
comment cela se fait il que l'outil de lecture d'entete de webrankinfo y arrive ? Et il me semble que cet outil utilise aussi CURL en plus
 
WRInaute accro
Python:
from scrapling import Fetcher, StealthyFetcher, PlayWrightFetcher


#url = 'https://www.king-jouet.com/jeu-jouet/jeux-societes/jeux-strategie/ref-142728-le-jeu-carcassonne.htm'
url = 'https://www.smythstoys.com/fr/fr-fr/jouets/jouets-prescolaires/minnie-mouse/minnie-mouse-coffret-fashion-25-pieces/p/218813'
page = PlayWrightFetcher().fetch(url)

print(page)

HTML:
python .\run.py
[2025-02-07 07:24:07] INFO: Fetched (200) <GET https://www.smythstoys.com/fr/fr-fr/jouets/jouets-prescolaires/minnie-mouse/minnie-mouse-coffret-fashion-25-pieces/p/218813> (referer: https://www.google.com/search?q=smythstoys)
<html><head><noscript>
            <title>Pardon Our Interruption</title></noscript><meta name="viewport" content="width=1000"><meta name="robots" content="noindex, nofollow"><meta http-equiv="cache-control" content="no-cache, no-store, must-revalidate"><meta http-equiv="pragma" content="no-cache"><meta http-equiv="expires" content="0"><style>
            .container { max-width: 800px; margin: auto; font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; color: #7a838c; }
            h1 { color: #2a2d30; font-weight: 500; }
            li { margin: 0 0 10px; }
            a { color: #428bca; }
            a:hover, a:focus { color: #2a6496; }
        </style><script>
          var isSpa = new URLSearchParams(window.location.search).get('X-SPA') === '1' || window.isImpervaSpaSupport;
        </script><script>
          window.onProtectionInitialized = function(protection) {
            if (protection && protection.cookieIsSet && !protection.cookieIsSet()) {
              showBlockPage();
              return;
            }
            if (!isSpa) {
              window.location.reload(true);
            }
          };
          window.reeseSkipExpirationCheck = true;
        </script><script>
          if (!isSpa) {
            var scriptElement = document.createElement('script');
            scriptElement.type = "text/javascript";
            scriptElement.src = "/onalbaine-legeance-what-come-Womany-Malcome-to-o/14167535692918208311?s=0NU63Aud";
            scriptElement.async = true;
            scriptElement.defer = true;
            document.head.appendChild(scriptElement);
          }
        </script><script type="text/javascript" src="/onalbaine-legeance-what-come-Womany-Malcome-to-o/14167535692918208311?s=0NU63Aud" async="" defer></script><script type="text/javascript">if (sessionStorage) { sessionStorage.setItem('distil_referrer', document.referrer); }</script></head><body><iframe style="display: none;"></iframe>



        <div class="container" style="display: none;">
            <script>document.getElementsByClassName("container")[0].style.display = "none";</script><h1>Pardon Our Interruption</h1>
<p>As you were browsing something about your browser made us think you were a bot. There are a few reasons this might happen:</p>
<ul><noscript><li>You've disabled JavaScript in your web browser.</li></noscript>
<li>You're a power user moving through this website with super-human speed.</li>
<li>You've disabled cookies in your web browser.</li>
<li>A third-party browser plugin, such as Ghostery or NoScript, is preventing JavaScript from running. Additional information is available in this <a title="Third party browser plugins that block javascript" href="http://ds.tl/help-third-party-plugins" target="_blank">support article</a>.</li>
</ul><p>To regain access, please make sure that cookies and JavaScript are enabled before reloading the page.</p>


        </div>
        <script>
          function showBlockPage() {
            document.title = "Pardon Our Interruption";
            document.getElementsByClassName("container")[0].style.display = "block";
          }

          if (isSpa) {
            showBlockPage();
          } else {
            window.interstitialTimeout = setTimeout(showBlockPage, 10000);
          }
        </script></body></html>
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut