REST: Glassdoor API benötigt User-Agent im Header

Das ist auf diese frage bezogen Ich versuchte, die Glassdoor Public API mit den dokumentierten Parametern abzufragen, bekam aber immer eine 403 Forbidden Response. Um sicherzustellen, dass die Abfrageparameter verwendet wurden, um die URL korrekt zu erstellen, nahm ich die zusammengesetzte Abfrage-URL und versuchte es in meinem Browser und es funktionierte.

Nach hinten aus der Abfrage, die mein Browser gemacht hat, habe ich herausgefunden, dass der User Agent nicht nur ein Parameter in der URL sein muss, sondern auch im Header übergeben werden muss.

Also das alles zusammen, hier ist Code, der die Glassdoor Public API sukzessive abfragen wird:

import urllib.request as request import requests import json from collections import OrderedDict # authentication information & other request parameters params_gd = OrderedDict({ "v": "1", "format": "json", "tp": "xxxxxx", "tk": "yyyyyyyy", "action": "employers", "employerID": "11111", # programmatically get the IP of the machine "userip": json.loads(request.urlopen("http://ip.jsontest.com/").read().decode('utf-8'))['ip'], "useragent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36" }) # construct the URL from parameters basepath_gd = 'http://api.glassdoor.com/api/api.htm' # request the API response_gd = requests.get(basepath_gd, params=params_gd, headers={ "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36" }) # check the response code (should be 200) & the content response_gd response_gd.content 

Meine Frage ist – warum muss der User-Agent im Abfrage-Header angegeben werden, wenn er bereits ein Teil der URL-Parameter ist? Sollte die Abfrage nicht ohne den User-Agent-Header funktionieren?

  • Django REST Framework - Separate Berechtigungen pro Methoden
  • Django Rest Framework: Implementierung von Many-to-Many-Beziehung in Serializer
  • Django Rest Framework - Lesen Sie verschachtelte Daten, schreiben Sie Integer
  • Hinzufügen von mongoDB-Dokument-Array-Element mit Python Eve
  • Kein Modul namens http_client Fehler beim Versuch, Django mit Django Rest Framework auszuführen
  • Django Rest Framework: Richtiger Weg, um ListFields zu serialisieren
  • Client-Anmeldeinformationen funktionieren nicht für powerBI REST API
  • Funktioniert SessionAuthentication in Tastypie für HTTP POST?
  • One Solution collect form web for “REST: Glassdoor API benötigt User-Agent im Header”

    Fg,

    Einige Anbieter mögen es nicht, Daten an automatisierte Werkzeuge zu liefern, die einfach ihre Daten kratzen können … eine der Möglichkeiten, wie sie "sagen können", dass sie eine "Person" bedienen und nicht irgendeine Art von whacky Python-Skript ist, indem sie überprüft Der User-Agent-Header, der normalerweise vom Browser angewendet wird.

    In diesem speziellen Fall hat Glassdoor ihre API-Begriffe hier veröffentlicht , und von der Oberseite von Seite drei geben sie an: "Wir behalten uns das Recht vor, Anwendungen zu beschränken oder zu blockieren, die eine große Anzahl von Anrufen an die Glassdoor API machen, die nicht primär darauf reagieren Die direkten Aktionen der einzelnen Endbenutzer. "

    Ich bin geneigt zu denken, dass dies durch die Suche nach Header: User-Agent erzwungen wird, aber die meisten Unternehmen werden nicht explizit angeben, wie sie dies erzwingen. Sie verlangen auch, dass Sie ihr Logo und Link zu ihrer Homepage auf der zugelassenen Webseite / Website, auf der Sie ihre Daten anzeigen.

    Hoffe das hilft.

    Python ist die beste Programmiersprache der Welt.