PHP - 文件使用CURL获取内容

时间:2018-03-30 15:03:55

标签: php curl

我有curl的问题,我试图使用CURL获取内容但返回null,我不知道我想念的,请告诉我,这是我的代码:

$url = "https://shopee.co.id/api/v1/search_items/?by=pop&order=desc&keyword=yi 067&newest=0&limit=50&page_type=shop&match_id=16775174";
$html = file_get_contents_curl($url);
var_dump($html);

function file_get_contents_curl($url) {
    $ch = curl_init();

    curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_ENCODING, 0);
    curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST , "GET");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);  
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json'));


    $data = curl_exec($ch);
    curl_close($ch);

    return $data;
}

1 个答案:

答案 0 :(得分:1)

使用curl,在关闭卷曲连接之前使用curl_getinfo来获取有关卷曲连接的其他信息通常是个好主意。在您的情况下,NULL / FALSE /空结果可能是由于多种原因,检查curl信息可能有助于您找到更多详细信息。这是您的函数的修改版本,它使用此函数来获取其他信息。您可以考虑将print_r($info, TRUE)写入日志文件或其他内容。它可能为空,因为服务器响应为空。它可能是错误的,因为由于防火墙问题,无法从您的服务器访问该URL。它可能会返回 http_code ,即404 NOT FOUND或5XX。

function file_get_contents_curl($url) {
    $ch = curl_init();

    curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_ENCODING, 0);
    curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST , "GET");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);  
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));

    $data = curl_exec($ch);

    $info = curl_getinfo($ch);


    if(curl_errno($ch)) {
        throw new Exception('Curl error: ' . curl_error($ch));
    }

    curl_close($ch);

    if ($data === FALSE) {
        throw new Exception("curl_exec returned FALSE. Info follows:\n" . print_r($info, TRUE));
    }

    return $data;
}

编辑:我也添加了curl_errno检查。