gpt4 book ai didi

php - 将file_get_contents与错误的代理一起使用时,如何处理500个内部服务器错误?

转载 作者:行者123 更新时间:2023-12-03 07:47:45 24 4
gpt4 key购买 nike

如果我使用错误的代理在PHP 中运行此代码,则会收到500个内部服务器错误。
如何处理并继续执行?

$opts = array(
'http'=>array(
'method'=>"GET",
'proxy' => 'tcp://100.100.100.100:80' //a wrong proxy
)
);

$context = stream_context_create($opts);

$file = file_get_contents('http://ifconfig.me/ip', false, $context);

最佳答案

我假设您说“处理”是指两件事:

  • 如果脚本连接到“错误的”代理,它将等待很长时间才能建立连接,直到超时。该脚本应设置较低的超时,因此用户不会永远等待。
  • 如果在访问外部资源期间发生错误,请不要死亡或显示难看的消息。相反,假装一切都很酷。

  • 至于1)远程连接的超时在PHP的 default_socket_timeout设置中定义,默认为60秒。您可以/应该为自己的 call 设置一个低得多的超时:
    $opts = array(
    'http'=>array(
    'timeout'=> 2, // timeout of 2 seconds
    'proxy' => 'tcp://100.100.100.100:80' //a wrong proxy
    )
    );

    至于2),通常会使用 try/ catch块。不幸的是, file_get_contents()是那些不会引发可捕获异常的旧PHP函数之一。

    您可以通过在函数调用之前添加 @符号来抑制可能的错误消息:
    $file = @file_get_contents('http://ifconfig.me/ip', false, $context);

    但是,那么您根本无法处理任何错误。

    如果要至少进行一些错误处理,则应使用 cURL。不幸的是,它也不会抛出异常。但是,如果发生cURL错误,则可以使用 curl_errno()/ curl_error()读取它。

    这是使用cURL实现的代码:
    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, "http://ifconfig.me/ip");
    curl_setopt($ch, CURLOPT_PROXY, 'tcp://100.100.100.100:80');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 2);
    curl_setopt($ch, CURLOPT_HEADER, 1);

    $data = curl_exec($ch);
    $error = curl_errno($ch) ? curl_error($ch) : '';

    curl_close($ch);

    print_r($error ? $error : $data);

    这样,您可以确定发生错误时要做什么。

    关于php - 将file_get_contents与错误的代理一起使用时,如何处理500个内部服务器错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26260329/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com