Размещенный скрипт блокируется внешними веб -сайтами по запросам, но они могут быть сделаны локальноPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Размещенный скрипт блокируется внешними веб -сайтами по запросам, но они могут быть сделаны локально

Сообщение Anonymous »

У меня есть сервер FASTAPI, который подключает и выполняет запросы к веб -сайту текстов Genius.com через его библиотеку TricsERIUS . Но так как гений требует ключа API для подключения к нему, и я не хочу, чтобы мой ключ был украден, я решил разместить сценарий в веб -службе, а затем позвонить его оттуда, чтобы я мог выпустить только фронт для публики (в приложении для настольного компьютера) без ключа. Проблема заключается в том, что гений, кажется, отвергает мои запросы, когда они приходят с хостинского сервера, то есть они возвращают 403 с огромным HTML-кодом, который, по мнению Copilot, является своего рода защитой CAPTCHA или против BOT от CloudFlare. Однако, если я запускаю сервер локально и делаю запросы оттуда, он работает просто отлично. Я пытаюсь сделать что -то, что намеренно запрещено, или есть способ, которым я смогу достичь этого? Вот пример кода моего сервера: < /p>
import os
import json
import sys
from fastapi import FastAPI
from fastapi.responses import StreamingResponse
from pydantic import BaseModel
import lyricsgenius

app = FastAPI()

GENIUS_ACCESS_TOKEN = os.getenv("GENIUS_TOKEN")

if GENIUS_ACCESS_TOKEN:
# I tried adding an user_agent to modify the headers so Cloudflare doesnt think that I am a bot, but it seems not to work
genius = lyricsgenius.Genius(
GENIUS_ACCESS_TOKEN,
remove_section_headers=True,
skip_non_songs=False,
user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64)"
)
else:
print("Fatal error: genius could not be started")
sys.exit(1)

async def buscar_cancion(cancion: Cancion):
letra = ''
error = ''

try:
# Here is where it fails
song_genius = genius.search_song(cancion.titulo, cancion.artista)
# ...
except Exception as e:
# ...
print(e)

return ...

async def process_song_list(canciones: list[Cancion]):
for cancion in canciones:
resultado = await buscar_cancion(cancion)
yield json.dumps(resultado) + '\n'

@app.post("/api/procesar")
async def procesar(canciones: Payload):
return StreamingResponse(process_song_list(canciones.items), media_type="application/json")


Подробнее здесь: https://stackoverflow.com/questions/797 ... can-be-don
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»