如何获得curl exec响应

时间:2017-05-28 09:56:35

标签: php curl response

我正在开发一个PHP脚本:

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

    我不知道如何获得curl_exec的最终响应。 curl_exec   在$ response = call('GET',$ query);     - 即使没有完成也会回复一些东西。

    这些我的循环正在等待调用函数的响应。但是它不起作用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;
        }
    }
    

    这是我的卷曲调用函数

    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);
    

    请帮忙。已经花了半天时间来解决它

1 个答案:

答案 0 :(得分:1)

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

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

如果您只是在网址的某个地方出现打字错误,我不会感到惊讶。

另外,出于调试目的,暂时替换

return curl_exec($ch);

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

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

有关上次5xx转移的有用信息,请参阅curl_getinfo()

解决OPs评论:

请尝试使用此完整脚本(没有其他内容:没有curl循环,没有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; 返回一个空字符串,则表示您的脚本正常工作,但您调用的URL只返回一个空响应。

如果var_dump( $response ); 为空且实际包含JSON数据,请替换

$response

var_dump( $response );