Maison >développement back-end >tutoriel php >Utilisez le code PHP pour implémenter le proxy de requête et le proxy inverse de l'interface API Baidu Wenxinyiyan

Utilisez le code PHP pour implémenter le proxy de requête et le proxy inverse de l'interface API Baidu Wenxinyiyan

WBOY
WBOYoriginal
2023-08-13 08:09:291236parcourir

Utilisez le code PHP pour implémenter le proxy de requête et le proxy inverse de linterface API Baidu Wenxinyiyan

Utilisez le code PHP pour implémenter le proxy de requête et le proxy inverse de l'interface API Baidu Wenxin Yiyan

Vue d'ensemble :
Baidu Wenxin Yiyan est une interface API qui fournit diverses phrases aléatoires et citations de célébrités, qui peuvent être utilisées sur des sites Web, des applications et d'autres applications. Mais pour certaines raisons, nous devrons peut-être appeler l'API à l'aide d'un proxy ou d'un proxy inverse pour éviter certaines limitations ou mieux contrôler les requêtes.

Demande de proxy :
Demander un proxy signifie envoyer notre demande à un serveur intermédiaire (serveur proxy), puis le serveur proxy l'envoie à l'interface API Baidu Wenxin Yiyan en son nom. Cette méthode peut masquer notre véritable adresse IP, dissimuler la demande d'informations de première classe et améliorer le taux de réussite de la demande.

Tout d'abord, nous devons créer un serveur proxy. Vous pouvez utiliser PHP pour créer un simple serveur HTTP qui écoute sur un port spécifié, tel que 8000. Voici un exemple de code simple :

<?php
// 创建一个代理服务器
$proxy = stream_socket_server('tcp://127.0.0.1:8000', $errno, $errstr);
if (!$proxy) {
    die("创建代理服务器失败:$errstr ($errno)");
}

while (true) {
    // 接受客户端连接请求
    $client = stream_socket_accept($proxy);
    if ($client) {
        // 从客户端读取请求
        $request = fread($client, 8192);

        // 修改请求头,伪装为百度文心一言API的请求
        $request = str_replace(
            'Host: localhost:8000',
            'Host: api.lovelive.tools', 
            $request
        );

        // 创建与API接口的连接
        $api = stream_socket_client('tcp://api.lovelive.tools:80', $errno, $errstr, 30);
        if ($api) {
            // 向API接口发送请求
            fwrite($api, $request);

            // 获取API的响应并返回给客户端
            while (!feof($api)) {
                fwrite($client, fread($api, 8192));
            }
            fclose($api);
        } else {
            fclose($client);
        }
    }
}
fclose($proxy);

Enregistrez le code ci-dessus en tant que fichier proxy.php et exécutez-le via la ligne de commande :

php proxy.php

À l'heure actuelle, notre serveur proxy s'exécute sur le port 127.0.0.1:8000.

Ensuite, nous pouvons envoyer la requête à l'interface API Baidu Wenxin Yiyan en faisant une requête au serveur proxy et obtenir le résultat de la réponse. Par exemple, nous pouvons utiliser l'outil de ligne de commande curl pour envoyer une requête :

curl -x localhost:8000 https://api.lovelive.tools/api/SweetNothings/1

Proxy inversé :
Le proxy inverse fait référence à la configuration du serveur pour transmettre la requête à un autre serveur lorsque le client envoie une requête et renvoyer la réponse du serveur à le client. Cette approche permet d'obtenir un équilibrage de charge et une haute disponibilité.

Tout d'abord, nous devons configurer le serveur Web pour transmettre toutes les requêtes de l'API Baidu Wenxin Yiyan à notre serveur proxy inverse. Voici un exemple de fichier de configuration Nginx :

server {
    listen 80;
    server_name api.mydomain.com;
    
    location / {
        proxy_pass http://localhost:8000;
        proxy_set_header Host api.lovelive.tools;
    }
}

La configuration ci-dessus transmet la requête au serveur proxy que nous avons créé ci-dessus (exécuté sur localhost:8000).

Dans le serveur proxy inverse, notre travail consiste à accepter la demande du client, à la transmettre à l'interface API Baidu Wenxin Yiyan et à renvoyer sa réponse au client. Voici un exemple de code simple :

<?php
// 创建与API接口的连接
$api = stream_socket_client('tcp://api.lovelive.tools:80', $errno, $errstr, 30);
if ($api) {
    // 从客户端读取请求
    $request = file_get_contents('php://input');

    // 向API接口发送请求
    fwrite($api, $request);

    // 获取API的响应并返回给客户端
    while (!feof($api)) {
        echo fread($api, 8192);
    }
    fclose($api);
} else {
    header('HTTP/1.1 500 Internal Server Error');
    echo "与API接口连接失败";
}

Enregistrez le code ci-dessus sous le fichier reverse_proxy.php et exécutez-le via la ligne de commande :

php -S localhost:8000 reverse_proxy.php

À l'heure actuelle, notre serveur proxy inverse s'exécute sur le port localhost:8000.

Ensuite, le client peut envoyer directement une requête à api.mydomain.com, puis le serveur proxy inverse transmettra la requête à l'interface API Baidu Wenxin Yiyan et renverra sa réponse au client.

Résumé : 
Ce qui précède est la méthode d'utilisation du code PHP pour implémenter le proxy de requête et le proxy inverse de l'interface API Baidu Wenxin Yiyan. Grâce aux proxys et proxys inverses, nous pouvons mieux contrôler les demandes tout en protégeant et en optimisant nos applications. Qu'il s'agisse d'un proxy de requête ou d'un proxy inverse, il peut être configuré et modifié en fonction des besoins réels pour répondre aux différents besoins métiers.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn