Mi sitio web de Django está alojado en el servidor Apache. Quiero enviar datos usando requestes.post a mi sitio web usando una secuencia de comandos de python en mi PC, pero está prohibido dar 403.
import json url = "http://54.161.205.225/Project/devicecapture" headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36', 'content-type': 'application/json'} data = { "nb_imsi":"test API", "tmsi1":"test", "tmsi2":"test", "imsi":"test API", "country":"USA", "brand":"Vodafone", "operator":"test", "mcc":"aa", "mnc":"jhj", "lac":"hfhf", "cellIid":"test cell" } response = requests.post(url, data =json.dumps(data),headers=headers) print(response.status_code)También he dado permiso al directorio que contiene vistas.py donde irá esta solicitud. He revisado muchas otras respuestas, pero no ayudaron. También probé el código sin json.dumps , pero tampoco funciona con eso. ¿Cómo resolver esto?
Después de investigar, parece que la URL en la que debe publicar para iniciar sesión es: http://54.161.205.225/Project/accounts/login/?next=/Project/
Puede calcular lo que necesita enviar en una solicitud de publicación consultando la pestaña Red de Chrome DevTools. Esto nos dice que debe enviar los campos nombre de username , password y csrfmiddlewaretoken , que debe extraer de la página.
Puede obtenerlo extrayéndolo de la respuesta de la primera solicitud de obtención. Se almacena en la página de esta manera:
<input type="hidden" name="csrfmiddlewaretoken" value="OspZfYQscPMHXZ3inZ5Yy5HUPt52LTiARwVuAxpD6r4xbgyVu4wYbfpgYMxDgHta">Por lo tanto, deberá hacer algún tipo de Regex para obtenerlo. Lo resolverás.
Así que primero tienes que crear una session . Luego cargue la página de inicio de sesión con una solicitud de obtención. Luego envíe una solicitud de publicación con sus credenciales de inicio de sesión a esa misma URL. Y luego su sesión obtendrá las cookies requeridas que luego le permitirán publicar en la URL deseada. Este es un ejemplo a continuación.
import requests # Create session session = requests.session() # Add user-agent string session.headers.update({'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) ' + 'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36'}) # Get login page response = session.get('http://54.161.205.225/Project/accounts/login/?next=/Project/') # Get csrf # Do something to response.text # Post to login response = session.post('http://54.161.205.225/Project/accounts/login/?next=/Project/', data={ 'username': 'example123', 'password': 'examplexamplexample', 'csrfmiddlewaretoken': 'something123123', }) # Post desired data response = session.post('http://url.url/other_page', data={ 'data': 'something', }) print(response.status_code)Con suerte, esto debería llevarte allí. Buena suerte.
Para obtener más información, consulte esta pregunta sobre solicitudes: Solicitudes de Python y sesiones persistentes
Me enfrenté a esa situación muchas veces Los problemas fueron:
las cosas podrían ayudar con la depuración:
Verifique los registros de errores de apache para investigar qué salió mal
intente ejecutar el servidor localmente y publíquelo para asegurarse de que el problema no esté relacionado con apache