Rumah > Soal Jawab > teks badan
Saya perlukan bantuan menterjemah kod python kepada PHP. Beginilah cara skrip disediakan untuk berkomunikasi dengan pelayan API, menggunakan log masuk POST dalam bahagian kod ini.
Kod Python telah diuji dan berfungsi, tetapi saya tidak dapat mengetahui dengan tepat cara mana saya harus menukarnya kepada PHP kerana saya mendapat respons kosong daripada API, yang bermaksud - Ralat. Saya mengesyaki menggunakan parameter siaran atau kaedah siaran yang salah.Dalam kod python, terdapat ulasan yang menerangkan rupa bentuk pulangan API yang berjaya.
Editor:
var_dump($result); mengembalikan bool(false) dan apabila pelaporan ralat didayakan, amaran ini akan muncul:
警告: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 - skrip semasa
<?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 (contoh berfungsi)
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
P粉2810894852024-03-29 13:13:59
param=dictionary
Letakkan parameter ke dalam parameter pertanyaan URL dan bukannya data POST.
Pelayan memerlukan pengepala Content-length:
, yang PHP tidak hantar secara lalai.
Untuk memasukkan rn
dalam pengepala, anda mesti menggunakan petikan berganda, bukan petikan tunggal.
$username, 'password' => $password, 'json' => True); $options = array('http' => array( 'header' => "Content-Length: 0\r\n", 'method' => 'POST', )); $context = stream_context_create($options); $result = file_get_contents($api_url.'/gettoken?' . http_build_query($parameters), false, $context); var_dump($result); ?>