Как определить конечную точку GraphQL с помощью Python
Я пытаюсь обнаружить конечную точку graphql с помощью языка Python. Я абсолютный новичок, но попробовал написать код. Не могли бы вы предложить изменения и лучшие способы сделать это? КОД:
import requests,urllib,urllib.request
import string
consoleDict = [
"",
"/graphql",
"/graphql/console",
"graphql.php",
"graphiql",
"explorer",
"altair",
"/playground"
]
for endpoint in consoleDict:
ep = ' http://159.100.248.211 '
response = requests.get(ep)
if response.status_code in [200,403]:
print("It is a GraphQL endpoint",endpoint)
Спасибо:)
1 ответ
Даже с gql
, вам нужна схема, чтобы что-нибудь просить. Если вы этого не знаете, вы можете использовать запрос самоанализа:
{
__schema {
types {
name
}
}
}
На некоторых конечных точках это может быть отключено, но если вы не знаете схему, это хорошая отправная точка. Попробуйте что-то вроде этого:
import json
import requests
from urllib import parse
paths = [
"",
"/graphql",
"/graphql/console",
"graphql.php",
"graphiql",
"explorer",
"altair",
"/playground"
]
query = """{
__schema {
types {
name
}
}
}
"""
for path in paths:
hostname = 'http://159.100.248.211'
endpoint = parse.urljoin(hostname, path)
try:
print(f"Attempt: {endpoint}")
response = requests.post(endpoint, json={'query': query}, timeout=0.1)
except Exception:
print("No GraphQL endpoint found")
else:
if response.status_code == 200:
json_data = json.loads(response.text)
if json_data.get('data'):
print("It is a GraphQL endpoint",endpoint)
Сообщите мне, работает ли это