Apakah fungsi setara dalam PHP yang melaksanakan fungsi 'requests.post' dalam Python?
P粉495955986
P粉495955986 2024-03-28 14:48:16
0
1
367

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粉495955986
P粉495955986

membalas semua(1)
P粉281089485

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);
?>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan