2016-04-29 141 views
2

PHP的curl令人惊讶地是不可取消和模糊的。使用cURL下载JSON API数据时遇到了一些问题。我想看看究竟发送到远程HTTP服务器的是cURL。获取PHP curl发送的数据

目前我唯一的调试选项是暂时发送请求到一些简单的HTTP服务器,将输入写入标准输出。我需要编写这个服务器来调试curl!

我做什么:

function get_data($url) { 
    $ch = curl_init(); 
    echo "Download: $url.\n"; 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
    // I hoped to get some debug info 
    // but this setting has no effect 
    curl_setopt($ch, CURLOPT_VERBOSE, true);  
    curl_setopt($ch, CURLOPT_HEADER, array(
    'User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0', 
    'X-Purpose: Counting downloads.' 
)); 

    echo "Sending: \n".curl_getinfo($ch, CURLINFO_HEADER_OUT); 
    $data = curl_exec($ch); 

    var_dump($data); 
    echo curl_error($ch)." ".curl_errno($ch); 
    curl_close($ch); 
    return $data; 
} 

我怎样才能获得由卷曲发来的文本数据?

回答

0

如果要定义页眉,你应该使用CURLOPT_HTTPHEADERCURLOPT_HEADER,即:

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0', 
    'X-Purpose: Counting downloads.' 
)); 

要获得内容卷曲发送使用:

curl_setopt($handle, CURLOPT_VERBOSE, true); 
curl_setopt($handle, CURLOPT_STDERR,$f = fopen($verbosePath, "w+")); 

function get_data($url) { 
$verbosePath = __DIR__.DIRECTORY_SEPARATOR.'verbose.txt'; 
echo "Saving verbose to: $verbosePath\n"; 
$handle=curl_init('http://www.google.com/'); 
curl_setopt($handle, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($handle, CURLOPT_CONNECTTIMEOUT, 5); 
curl_setopt($handle, CURLOPT_SSL_VERIFYHOST, 0); 
curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, 0); 
curl_setopt($handle, CURLOPT_HTTPHEADER, array(
    'User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0', 
    'X-Purpose: Counting downloads.' 
)); 
curl_setopt($handle, CURLOPT_VERBOSE, true); 
curl_setopt($handle, CURLOPT_STDERR,$f = fopen($verbosePath, "w+")); 
$data = curl_exec($handle); 
curl_close($handle); 
fclose($f); 
return $data; 
} 

get_data("https://www.google.com"); 

verbose.txt

* About to connect() to www.google.com port 80 
* Trying 172.217.0.100... * connected 
* Connected to www.google.com (172.217.0.100) port 80 
> GET/HTTP/1.1 
Host: www.google.com 
Accept: */* 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0 
X-Purpose: Counting downloads.