2017-07-24 7 views
0

Bonjour les gars, je vais avoir des problèmes avec les appels d'un script python à travers mon site, que ce soit en utilisant PHP ouPHP/AJAX Python appel - 403 Forbidden

AJAX

Toutes mes affaires, html, php, css et py sont en le même dossier/var/www/html/

JS:

document.getElementById('print').onclick = function(){Print()}; 
function Print() { 
var param = 'zya'; 
    $.ajax({ 
    type: 'POST', 
    url: '../degaps1.py', 
    data: {param: param}, 
    success: function(response){ 
     output = response; 
     alert(output); 
    } 
    }); 

Python:

degaps1.py 
import cgi 
import cgitb; cgitb.enable() 
print "Content-Type: text/html" 
print "" 
arguments = cgi.FieldStorage() 
print "test" 

Quand j'utilisais le "url" sans "../" il imprimait tout le code, maintenant je reçois un message dans la console ... 403 Interdit. Que puis-je faire pour le réparer?. Merci d'avance!

Si je ne me trompe pas, la sortie dans l'alerte devrait être "test".

+0

est votre serveur configuré pour exécuter des scripts CGI? Par défaut, demander un fichier Python va juste vous chercher le contenu de ce fichier. Voir: https://docs.python.org/2/library/cgi.html#installing-your-cgi-script-on-a-unix-system – JHS

Répondre

1

Vous ne pouvez pas simplement appeler des scripts en déplacement comme ça, au plus ce que vous pouvez obtenir de ceci est juste le contenu du fichier. Vous avez besoin d'un serveur à faire ... vous savez ... des choses côté serveur comme la gestion des requêtes.

Jetez un oeil à Flask. C'est un petit serveur pour python, il ne prend pas le temps de le configurer et une fois que vous l'avez configuré, vous pouvez appeler vos scripts via Javascript. Vous pouvez aussi chercher d'autres solutions mais je me souviens quand j'avais besoin d'utiliser Python au lieu de PHP, Flask était mon sauveur!

0

Enfin je l'ai eu pour travailler !. J'avais la configuration sur conf.modules.d/apache.conf et conf.d/vhost.conf bien ensemble, avec les chemins corrects pour les fichiers ... mais le fichier principal, conf/httpd.conf avait tous les paramètres mal, je les ai tous changés et ça a finalement marché! : D

vhost.conf

NameVirtualHost *:80 
<VirtualHost *:80> 
    ServerName test 
    ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" 
    ErrorLog /var/www/html/logs/errors.log 
    CustomLog /var/www/html/logs/access.log combined 
    <Directory /> 
    Options FollowSymLinks 
    AllowOverride All 
    </Directory> 
</VirtualHost> 

apache.conf

DocumentRoot "/var/www/html" 

<IfModule prefork.c> 
    StartServers  5 
    MinSpareServers  20 
    MaxSpareServers  40 
    MaxRequestWorkers 256 
    MaxConnectionsPerChild 5500 
</IfModule> 

httpd.conf

Include conf.modules.d/*.conf 
DocumentRoot "/var/www/html" 
<Directory "/var/www/html"> 
    Options Indexes FollowSymLinks 
    AllowOverride None 
    Require all granted 
</Directory> 
<IfModule alias_module> 
    ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" 
</IfModule> 
<Directory "/var/www/cgi-bin"> 
    AllowOverride None 
    Options None 
    Require all granted 
</Directory> 

Le fichier .py est dans/var/www/cgi-bin /fichier.py

#!/usr/bin/python 
print "Content-type: text/html\n\n"; 
print "Hello World.\n"; 

Et la ajax est:

$.ajax({ 
    type: 'POST', 
    url: '../cgi-bin/file.py', 
    data: {param: param}, 
    success: function(response){ 
    output = response; 
    alert(output); 
    } 
}); 

The output is: alert >> Hello World! 

Il pourrait y avoir une certaine duplicité, mais il fonctionne maintenant: D