Заблокирован политикой CORS: нет «Access-Control-Allow-Origin» с использованием Flask

#python #flask #web-scraping #cors

#python #flask #очистка веб-страниц #cors

Вопрос:

Я пытаюсь создать веб-приложение flask, которое может загружать целую веб-страницу и отображать ее на localhost для обрезки элементов.Модуль запросов принимает все данные с сайта, за исключением некоторых, о которых говорится

из origin ‘http://127.0.0.1:5000 » был заблокирован политикой CORS: заголовок «Access-Control-Allow-Origin» отсутствует в запрошенном ресурсе.

Ниже приведен код, который у меня есть для приложения flask. Я тоже пробовал flask_cros, но, похоже, это не помогает.

 from flask_socketio import SocketIO, emit
from flask_session import Session
import requests
from bs4 import BeautifulSoup
from urllib.parse import urlparse
from flask_cors import CORS,cross_origin
app= Flask(__name__)
app.config["SECRET_KEY"] = os.getenv("SECRET_KEY")
app.config["CORS_HEADERS"]="Content-Type"
socketio=SocketIO(app)
session=Session(app)
cors = CORS(app)
dir= os.path.abspath(os.getcwd())
@app.route("/")
def index():
   
   return render_template("index.html")
@app.route("/crop",methods=["POST"])
@cross_origin()
def crop():
   if request.method=="POST":
       outfile=open("result.txt","w")
       outfile.write("<iframe>")
       outfile.close()
       dummy= open("templates/down.html",'w')
       dummy.close()
       global link
       link = str(request.form.get("url"))
       
       r= requests.get(link,allow_redirects=True,headers={"User-Agent":"Chrome/42.0.2311.135"})
       if r.status_code==405:
           return render_template("exception.html")
       soup = BeautifulSoup(r.content,"html.parser")
       outfile=open("links.html","w")
       for a in soup.findAll("link",attrs={'href':True},rel="stylesheet"):
           if a['href'][0:4]!="http":
               dom= urlparse(link)
               wurl=dom.scheme "://" dom.netloc
               r1=requests.get(wurl a['href'],headers={"User-Agent":"Chrome/42.0.2311.135"})
               if r1.status_code==200:    
                   a['href']= wurl   a['href']

                   print(a)
                   outfile.write(str(a))
               else:
                    a['href']= link   a['href']
                    outfile.write(str(a))
           else:
               outfile.write(str(a))
           
       outfile.close()
       
      
       body= soup.prettify("utf-8")
    
       with open("templates/down.html",'wb') as file:
           file.write(body)
       return render_template("base.html") ```
  

Ответ №1:

Вы хотите, чтобы flask отправил этот отсутствующий заголовок:

 Access-Control-Allow-Origin: *
  

Комментарии:

1. r= requests.get(link,allow_redirects=True,headers={"User-Agent":"Chrome/42.0.2311.135","Access-Control-Allow-Origin":'*'}) Я добавил это в строку, но не сработало.

2. Flask должен отправить его в качестве заголовка ответа.