Convertir Script Python en php [Résolu]

Signaler
Messages postés
65
Date d'inscription
samedi 9 février 2019
Statut
Membre
Dernière intervention
29 avril 2020
-
Messages postés
29515
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 septembre 2020
-
Bonjour, je cherche une manière de convertir un script Python en php ou réécrire le script en php.
Le script permet de générer un IBAN irlandais correcte.

import requests
import re
import string
import random

URL_IBAN_GENERATOR = "https://bank.codes/iban/generate/ireland/"

def random_generator(size, chars):
    return ''.join(random.choice(chars) for _ in range(size))

def bank_code():
    return "PFSR"

def branch_code():
    return 991070

def account_number():
    return random_generator(size=8, chars=string.digits)

r = requests.post(URL_IBAN_GENERATOR, data={ "input_0": bank_code(), "input_1": branch_code(), "input_2": account_number() })
print(r.status_code, r.reason)


match = re.search("IE[0-9]{2}[A-Z]{4}[0-9]{14}", r.text)

if match:
    print(match.group())
else:
    print("iban not found")


Je vous prie de m'aider
Merci

2 réponses

Messages postés
29515
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 septembre 2020
2 769
Bonjour,

Visiblement ce script fait une requête POST vers l'url https://bank.codes/iban/generate/ireland/
avec 3 variables

"input_0": bank_code(), "input_1": branch_code(), "input_2": account_number()

Sachant que bank_code = PFSR
branch_code = 991070
account_number est un nombre aléatoire de 8 chiffres.

En php, tu peux utiliser du CURL pour faire cette requête POST
Et tu trouveras sans mal sur internet des scripts de génération de nombres aléatoires.


Et pour finir, ce script vérifie que le résultat obtenu est conforme à la regex IE[0-9]{2}[A-Z]{4}[0-9]{14}

Messages postés
65
Date d'inscription
samedi 9 février 2019
Statut
Membre
Dernière intervention
29 avril 2020

Voici ce que j'ai pu faire mais sans succès
<?php
/* Utilisation de Curl */
 
//On stock la valeur des variables POST
$account_number = mt_rand(10010350,90141045);
$pattern='IE[0-9]{2}[A-Z]{4}[0-9]{14}';
 
//Initialisation de curl dans $curl
$curl = curl_init();
 
curl_setopt($curl, CURLOPT_URL, "https://bank.codes/iban/generate/ireland/"); //Page sur laquelle envoyer les POST autrement dit la page vers laquelle pointe le formulaire

$data=array(
'input_0' => 'PFSR'    
'input_1' => 991070,
'input_2' => $account_number;) 
curl_setopt($curl, CURLOPT_POST, 3);
curl_setopt($curl, CURLOPT_POSTFIELDS,$branch_code, $bank_code, $account_number); //On envoie les valeurs
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 3);
$data = curl_exec($curl); //On place le code de la page
 
//Fin de Curl
curl_close($curl);

 
/* Affichage du code */
 
//ech
echo preg_match($pattern) ;
?>
Messages postés
29515
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 septembre 2020
2 769
Ton script devrait ressembler à un truc du genre
<?php

//Affichage des erreurs PHP
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

/* Utilisation de Curl */
 
//On stock la valeur des variables POST
$account_number = mt_rand(10010350,90141045);
$pattern='IE[0-9]{2}[A-Z]{4}[0-9]{14}';
 
 
$data=array('input_0' => 'PFSR'  , 'input_1' => 991070, 'input_2' => $account_number );
$fields_string = http_build_query($data);
 
//Initialisation de curl dans $curl
$ch = curl_init();
 
curl_setopt($ch, CURLOPT_URL, "https://bank.codes/iban/generate/ireland/"); //Page sur laquelle envoyer les POST autrement dit la page vers laquelle pointe le formulaire
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,$fields_string); //On envoie les valeurs
curl_setopt($ch, CURLOPT_FAILONERROR, true); // Required for HTTP error codes to be reported via our call to curl_error($ch)
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSLVERSION, 3);
curl_setopt($ch, CURLOPT_SSL_CIPHER_LIST, 'SSLv3');

$data = curl_exec($ch); //On place le code de la page

if (curl_errno($ch)) {
    $error_msg = curl_error($ch);
}
curl_close($ch);

if (isset($error_msg)) {
    // TODO - Handle cURL error accordingly
    echo "ERREUR : <br>";
    print_r($error_msg);
    exit();
}
 


 
/* Affichage du code */
 
//ech
echo preg_match($pattern) ;
?>



Messages postés
29515
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 septembre 2020
2 769 >
Messages postés
65
Date d'inscription
samedi 9 février 2019
Statut
Membre
Dernière intervention
29 avril 2020

Tu n'as pas du copier/coller exactement le code que je t'ai donné....
Messages postés
65
Date d'inscription
samedi 9 février 2019
Statut
Membre
Dernière intervention
29 avril 2020
>
Messages postés
29515
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 septembre 2020

Mon hébergeur vient d'activer curl, je crois que tous marche bien par contre J'ai une erreur au niveau de la regex
Warning: preg_match() expects at least 2 parameters, 1 given on line 50
Messages postés
29515
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 septembre 2020
2 769 >
Messages postés
65
Date d'inscription
samedi 9 février 2019
Statut
Membre
Dernière intervention
29 avril 2020

Oui je n'avais pas regardé cette partie de ton code
https://www.php.net/manual/fr/function.preg-match.php

ça devrait donner un truc du genre
$matches = array();
preg_match('/'.$pattern.'/', $data, $matches,);
print_r($matches);
Messages postés
65
Date d'inscription
samedi 9 février 2019
Statut
Membre
Dernière intervention
29 avril 2020
>
Messages postés
29515
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 septembre 2020

Ça marche, j'ai ajouter $matches = $matches[0] pour afficher uniquement iban sans les éléments du tableau.
$matches = array();
preg_match('/'.$pattern.'/', $data, $matches);
$matches = $matches[0];
print_r($matches);

Merci beaucoup
Messages postés
29515
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 septembre 2020
2 769 >
Messages postés
65
Date d'inscription
samedi 9 février 2019
Statut
Membre
Dernière intervention
29 avril 2020

Pense à mettre le sujet en résolu.