В любом случае, чтобы «шпионить» за деятельностью curl_init () & curl_exec ()? - PullRequest
1 голос
/ 02 февраля 2011

У меня есть некоторый PHP-код, который когда-то работал WORK FINE. Он вызывает внешний 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 ]

2 голосов
/ 02 февраля 2011

Вероятно, 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 голос
/ 02 февраля 2011

В зависимости от того, на какой платформе вы находитесь, вы можете просматривать необработанные пакеты, только для командной строки linux, это будет tcpdump для вдов / других, вы можете использовать wireshark.

tcpdump -i eth1 tcp port 80

или

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...