我有一些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。由于某些原因,通过这个卷曲的事情突然放弃正确做它。没有人知道现在会有什么不同。
答案 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
或