无论如何要'窥探'curl_init()&的活动。 curl_exec()?

时间:2011-02-02 20:38:25

标签: php curl

我有一些PHP代码,在某一点上工作很精细。它调用外部API,API没有全部改变。 PHP代码也没有全部改变。但是突然之间,我对这个功能没有任何结果:

if (!function_exists(setFieldsAndCallURL))
{ 
    function setFieldsAndCallURL($url,$fields)
    {

        //url-ify the data for the POST
        $fields_string='';
              foreach($fields as $key=>$value) 
                { $fields_string .= $key.'='.$value.'&'; }
        rtrim($fields_string,'&');

        //open connection
        $ch = curl_init();

        //set the url, number of POST vars, POST data
        curl_setopt($ch,CURLOPT_URL,$url);
        curl_setopt($ch,CURLOPT_POST,count($fields));
        curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

        //execute the jump
        $result = '';
        $result = curl_exec($ch);

        //close connection
        curl_close($ch);

        return $result;
      }
}

之前,它会在调用时返回文本GUID:

$userURL ='https://api.nottherealendpointurl.net/public/user/authenticate';

$userFields = array(
     'username'=>$username,
     'lastName'=>$lastname,
     'firstName'=>$firstname,
     'email'=>$email,
     'token'=>urlencode($adminKey),
);

//Login this particular user
$userKey = setFieldsAndCallURL($userURL,$userFields);

但突然它开始返回“”(空字符串),我不明白为什么。

有没有办法获得更多信息并监视这件事的内部运作?使用HTTP标头日志记录软件查看它正在进行的调用?还是什么?

注意:我已经手动测试了POST到API,它正在按预期工作,我仍然回到正确的GUID。由于某些原因,通过这个卷曲的事情突然放弃正确做它。没有人知道现在会有什么不同。

2 个答案:

答案 0 :(得分:2)

现在服务器的ip被阻止,你的本地ip不在哪里?

您可能想要添加

 $headerFile = fopen(filepath_to_header_file);
 $errorFile = fopen(filepath_to_error_file);    

 curl_setopt($ch, CURLOPT_VERBOSE, 1); 
 curl_setopt($ch, CURLOPT_HEADER, 1); 
 curl_setopt($ch, CURLOPT_WRITEHEADER, $headerFile ); 
 curl_setopt($ch, CURLOPT_STDERR, $errorFile );

将响应标题和错误放入文件中并查看其内容。

修改 要验证服务器的IP是否被阻止,您可以尝试这样的

$host = "ssl://api.nottherealendpointurl.net/";
$port = 443;
$url = "/public/user/authenticate";

$timeout = 30;
$errno = "";
$errstr= "";

$fp = fsockopen($host, $port, $errno, $errstr, $timeout);
if($fp)
{
    $request = "GET ".$url." HTTP/1.1\r\n";
    $request.= "Host: ".$host."\r\n";
    $request.= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de-DE; rv:1.7.12) Gecko/20050919 Firefox/1.0.7\r\n";
    $request.= "Connection: Close\r\n\r\n";

    fwrite($fp, $request);
    while (!feof($fp))
    {
        $data .= fgets($fp, 128);
    }
    fclose($fp);
    echo $data;
}
else
{
    echo "ERROR: ".$errstr;
}

其中$ data包含来自远程服务器的响应 -

答案 1 :(得分:1)

根据您所使用的平台,您可以查看原始数据包,仅适用于linux命令行,对于widows /其他人,您可以使用wireshark进行tcpdump。

tcpdump -i eth1 tcp port 80

http://www.wireshark.org/download.html