Rumah  >  Soal Jawab  >  teks badan

Apakah fungsi setara dalam PHP yang melaksanakan fungsi 'requests.post' dalam Python?

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粉495955986P粉495955986178 hari yang lalu301

membalas semua(1)saya akan balas

  • P粉281089485

    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);
    ?>

    balas
    0
  • Batalbalas