如何获取 curl exec 响应

How to obtain curl exec response

我正在开发一个 PHP 脚本:

  1. 从数据库中获取 10 行(效果很好)
  2. 将这些行中的地址发送到地图 API
  3. 获取数据
  4. 将结果保存在数据库中(效果很好)

I don't know how to obtain the final response of curl_exec. curl_exec in $response = call('GET', $query); - even when hasn't completed returns something in response.

这些我的循环正在等待调用函数的响应。但它不起作用 json_decode($stringJSON) 在获得最终响应之前被调用

$requestHandled = false;
$response = "";

$response = call('GET', $query);
while(!$requestHandled) {
    if(strlen($response) > 5){

        $response = mb_convert_encoding($response, "UTF-8");
        $stringJSON = get_magic_quotes_gpc() ? stripslashes($response) : $response;
        echo $stringJSON;

        $jsonObject = "+";
        echo $jsonObject;

        $jsonObject = json_decode($stringJSON);

        echo $jsonObject;

        $requestHandled = true;
    }
}

这是我的 curl 调用函数

function call($method, $url, $data = false) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
    curl_setopt($ch, CURLOPT_URL, $url);
    if ($data) {
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        $headers = array();
        $headers[] = 'Content-Type: application/json';
        $headers[] = 'Content-Length: ' . strlen($data);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    }
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    return curl_exec($ch);

请帮忙。解决了半天

所以 var_dump( $response ) 的结果是一个空字符串?

在那种情况下,它只是意味着来自服务器的响应是空的,因为我刚刚测试了你的功能 call() 并且它似乎工作正常。换句话说,确保您尝试调用的 URL(使用 GET 方法)实际上是 returns 数据开头。

如果您只是在 URL 中的某处出现印刷错误,我不会感到惊讶。

另外,为了调试,暂时替换

return curl_exec($ch);

$result = curl_exec($ch); 
var_dump(curl_getinfo($ch));
return $result;

并调查 var_dump() 结果中的信息,以确保响应代码是 200(或任何其他指示成功的代码)而不是 4xx5xx 范围(分别表示客户端或服务器错误),例如。

请参阅 curl_getinfo() 了解有关将返回有关您上次 curl 转账的有用信息的更多信息。


解决 OP 评论:

请尝试这个完整的脚本(没有别的:没有 while 循环,没有 stripslashes(),没有 json_decode(),等等):

<?php

function call($method, $url, $data = false) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
    curl_setopt($ch, CURLOPT_URL, $url);
    if ($data) {
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        $headers = array();
        $headers[] = 'Content-Type: application/json';
        $headers[] = 'Content-Length: ' . strlen($data);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    }
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $result = curl_exec($ch); 
    var_dump(curl_getinfo($ch)); // check this result and make sure the response code is 200
    return $result;
}

$query = 'fill in the correct URL! (with http(s)://)';

$response = call('GET', $query);
var_dump( $response ); // check this result and see if it's an empty string
die;

如果 var_dump( $response ); returns 是一个空字符串,这意味着您的脚本工作正常,但您调用的 URL 只是返回了一个空响应。

如果$response不是空的并且实际包含JSON数据,替换

var_dump( $response );

$stringJSON = mb_convert_encoding( $response, "UTF-8" );

echo $stringJSON; // make sure this contains valid JSON data

// stripslashes() should not be needed

var_dump( json_decode( $stringJSON ) ); // if JSON data was valid, you should get a valid PHP data structure