J'ai besoin d'aide pour traduire le code Python en PHP. C'est ainsi que le script est configuré pour communiquer avec le serveur API, en utilisant la connexion POST dans cette partie du code.
Le code Python a été testé et fonctionne, mais je n'arrive pas à comprendre exactement de quelle manière je dois le convertir en PHP car je reçois une réponse vide de l'API, ce qui signifie - Erreur. Je soupçonne d'utiliser de mauvais paramètres de publication ou une mauvaise méthode de publication.Dans le code python, il y a un commentaire expliquant à quoi devrait ressembler un retour API réussi.
Éditeur :
var_dump($result); renvoie bool(false) et lorsque le rapport d'erreurs est activé, cet avertissement apparaîtra :
警告:file_get_contents(https://kodi.titlvi.com/api/subtitles/gettoken):无法打开流:HTTP请求失败! HTTP/1.1 404 Not Found in /var/www/html/test.php on line 19 bool(false)
PHP - script actuel
<?php error_reporting(-1); ini_set('display_errors', 1); $api_url = "https://kodi.titlovi.com/api/subtitles"; $username = "censored"; $password = "censored"; // sending user login request $parameters = array('username' => $username, 'password' => $password, 'json' => true); $options = array('http' => array( 'header' => 'Content-Type: application/x-www-form-urlencoded\r\n', 'method' => 'POST', 'content' => http_build_query($parameters) )); $context = stream_context_create($options); $result = file_get_contents($api_url.'/gettoken', false, $context); var_dump($result); ?>
Python (exemple fonctionnel)
api_url = 'https://kodi.titlovi.com/api/subtitles' def handle_login(self): """ Method used for sending user login request. OK return: { "ExpirationDate": datetime string (format: '%Y-%m-%dT%H:%M:%S.%f'), "Token": string, "UserId": integer, "UserName": string } Error return: None """ logger('starting user login') login_params = dict(username=self.username, password=self.password, json=True) try: response = requests.post('{0}/gettoken'.format(api_url), params=login_params) logger('Response status: {0}'.format(response.status_code)) if response.status_code == requests.codes.ok: resp_json = response.json() logger('login response data: {0}'.format(resp_json)) return resp_json elif response.status_code == requests.codes.unauthorized: show_notification(get_string(32006)) return None else: return None except Exception as e: logger(e) return None
param=dictionary
Mettez les paramètres dans les paramètres de requête d'URL au lieu des données POST.Le serveur nécessite l'en-tête
Content-length:
, que PHP n'envoie pas par défaut.Pour inclure
rn
dans l'en-tête, vous devez utiliser des guillemets doubles et non des guillemets simples.