2

例外をキャッチしようとしましたが、それでも「C:\OS\OpenServer\domains\kinopoisk\parser\php\vendor\guzzlehttp\ で「致命的なエラー: キャッチされていない例外 'GuzzleHttp\Exception\ClientException' とメッセージ 'Client error: 404'」が表示されますguzzle\src\Middleware.php:69"

 <?php

    ini_set('display_errors', 'on');
    error_reporting(E_ALL);
    set_time_limit(0);

    require "vendor/autoload.php";

    use GuzzleHttp\Client;
    use Psr\Http\Message\ResponseInterface;
    use GuzzleHttp\Exception\RequestException;
    use GuzzleHttp\Exception\ClientException;

    $filmsUrl = [297, 298];

    $urlIterator = new ArrayObject($filmsUrl);

    $client = new Client([
        'base_uri' => 'http://example.com',
        'cookies' => true,
    ]);

    foreach ($urlIterator->getIterator() as $key => $value) {
        try {
            $promise = $client->requestAsync('GET', 'post/' . $value, [
                'proxy' => [
                    'http'  => 'tcp://216.190.97.3:3128'
                ]
            ]);

            $promise->then(
                function (ResponseInterface $res) {
                    echo $res->getStatusCode() . "\n";
                },
                function (RequestException $e) {
                    echo $e->getMessage() . "\n";
                    echo $e->getRequest()->getMethod();
                }
            );
        } catch (ClientException $e) {
            echo $e->getMessage() . "\n";
            echo $e->getRequest()->getMethod();
        }
    }
    $promise->wait();

私のコードで何が間違っていますか?

4

2 に答える 2

6

よくわかりませんが、あなたはここでしか捕まえていませんClientException。もキャッチしてみてくださいRequestException。そのコードを見ると、Middleware.php:69使用されている例外クラスですが、すべての例外をキャッチしたい場合は、最も抽象的な例外クラスを選択する必要があり RuntimeExceptionますGuzzleException

次のようなことを試してください:

try {
    // your code here
} catch (RuntimeException $e) {
    // catches all kinds of RuntimeExceptions
    if ($e instanceof ClientException) {
        // catch your ClientExceptions
    } else if ($e instanceof RequestException) {
        // catch your RequestExceptions
    }
}

または、次のアプローチを試すことができます

try {
    // your code here
} catch (ClientException $e) {
    // catches all ClientExceptions
} catch (RequestException $e) {
    // catches all RequestExceptions
}

それが役立つことを願っています。

于 2015-11-22T11:39:54.043 に答える