En utilisant un programme très basique pour rechercher une requête sur un site Web et imprimer les résultats de la recherche, pourquoi est-ce que j'obtiens une erreur 502?

import requests
from bs4 import BeautifulSoup
import re

def main():
    url = "https://www.last10k.com/Search"
    dat = {'q':'goog'}
    resp = requests.get(url, params=dat)
    print(resp.content)
3
Derek Zhang 5 avril 2017 à 22:09

2 réponses

Meilleure réponse

Définissez un en-tête User-Agent. Comme ça:

import requests

def main():
    url = "https://www.last10k.com/Search"
    dat = {'q':'goog'}
    resp = requests.get(url, params=dat, headers={'User-Agent': 'Mozilla/5.0'})
    print(resp.status_code)

Pourquoi de cette exigence? Politique de Wikimedia User-Agent

5
elecay 5 avril 2017 à 20:12

J'ai eu ce problème et j'ai trouvé qu'un mélange de regarder le contenu et d'essayer la demande avec un navigateur m'a aidé à trouver la solution. Peut-être que cela vous aidera aussi, alors voici ce que j'ai fait:

Ma demande a réussi avec un navigateur, puis a échoué avec python. Les URL étaient les mêmes. J'ai donc utilisé le débogueur. Vous pouvez également simplement imprimer des éléments, mais le débogueur montre ce que tout est à voir et vous permet d'explorer ce que vous avez autrement manqué. Et j'ai trouvé que le contenu de la réponse sur l'échec de la demande python était un message d'erreur qui semble être un problème ruby.

Il y avait donc un comportement différent du côté distant, mais qu'est-ce qui le cause? L'ajout d'un en-tête User-Agent, comme suggéré, était bien, mais n'a rien changé. J'ai donc regardé les autres en-têtes et j'ai trouvé que la chaîne d'authentification de base était complètement différente.

Ma solution: j'ai alimenté la requête python avec des données d'authentification erronées en raison de certaines réaffectations que j'ai effectuées et le côté distant traitait mal les résultats de "permission refusée", ce qui a abouti à un 502 au lieu d'un 403.

2
Chris 30 juin 2017 à 08:20