账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    php guzzle 和 curl 返回结果不一致
    31
    0

    首先 composer require guzzlehttp/guzzle

    use GuzzleHttp\Client;
    function curl_get($url)
        {
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_TIMEOUT, 3);
            $result = curl_exec($ch);
            curl_close($ch);
            return $result;
        }
        
         function guzzle_get($url)
        {
            $client = new Client();
            try {
                $tmp = $client->get($url,array("timeout"=>3,"connect_timeout"=>3)); 
                $res = strval($tmp->getBody());
            } catch (\Exception $e) {
                $res = '';
                
            }
            return $res;
        }
        
        $res = guzzle_get('http://i.hq.sinajs.cn/?list=sh600011,sh600012');
        //返回字符串 var hq_str_sh600011%2Csh600012="";\n
        $res = curl_get('http://i.hq.sinajs.cn/?list=sh600011,sh600012');
        //正常返回 var hq_str_sh600011="华能国际,7.620,7.630,7.570,7.840,7.480,7.570,7.580,24252178,185351517.000,17372,7.570,65100,7.560,47600,7.550,19200,7.540,43200,7.530,31900,7.580,3300,7.590,46800,7.600,57580,7.610,9000,7.620,2018-09-19,15:00:00,00";var hq_str_sh600012="皖通高速,5.490,5.500,5.570,5.610,5.470,5.560,5.570,3832663,21267001.000,89200,5.560,60100,5.550,32800,5.540,14500,5.530,29200,5.520,32328,5.570,74300,5.580,129500,5.590,114700,5.600,93300,5.610,2018-09-19,15:00:00,00";

    两者有什么分别吗,为什么guzzle返回错误?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • Σ山兔子≡ 普通会员 1楼

      在 PHP 中,Guzzle 和 Curl 都是非常常用的 HTTP 客户端,它们都可以用来发送 HTTP 请求。然而,它们返回的结果可能并不一致,主要原因是它们都是异步请求,所以在返回结果之前,它们都会等待服务器的响应。

      如果这两个请求在等待响应时出现错误,或者在等待响应时服务器返回的结果与预期不符,那么这两个请求的结果就可能不一致。

      为了解决这个问题,你可以使用回调函数来处理响应。回调函数是 PHP 中的一个非常有用的特性,它允许你在处理异步请求时使用预定义的函数。

      例如,如果你的 HTTP 请求返回一个错误,你可以使用以下代码来处理这个错误:

      php try { $response = $client->request('GET', '/path/to/resource'); } catch (\GuzzleHttp\ClientException $e) { // 处理错误 }

      在这个例子中,如果 $client 的响应出现问题,那么这个错误将会被传递给 catch 节点。在 catch 节点中,你可以根据错误的类型来处理它。

      另外,如果你使用的是 Curl,你也可以使用 curl_set_option() 函数来设置错误处理方式。例如,你可以使用以下代码来设置错误处理方式:

      php curl_setopt($ch, CURLOPT_RETURNTRANSFER, false); // 设置返回结果为字符串 curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); // 设置 HTTP 请求头 curl_setopt($ch, CURLOPT_DEBUG, true); // 设置调试模式,返回更多的信息

      在这个例子中,如果 $ch 的响应出现问题,那么这个错误将会被传递给 curl_set_option() 函数。在 curl_set_option() 函数中,你可以设置错误处理方式,例如设置返回结果为字符串、设置 HTTP 请求头、设置调试模式等。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部