Так что я новичок во всем этом. Я пытаюсь научить себя, как правильно использовать CURL, и немного побаловаться вызовами API (не волнуйтесь, этот вопрос касается только использования CURL).
Теперь мой оригинальный код работал просто отлично - я структурировал запрос, используя urlencode, и подавляющее большинство запросов приводило к ответам, которые я искал. Приблизительно 10% полученных ответов, однако, это не получило бы результаты, в которых я нуждался. Позвольте мне привести пример:
$urlToFetch = "http://lsapi.seomoz.com/linkscape/url-metrics/" . urlencode($objectURL) . "?" . $this->structureURL();
$response = ConnectionUtil::makeRequest($urlToFetch);
Использование приведенного выше кода приведет к созданию $ urlToFetch со следующими данными:
http://lsapi.seomoz.com/linkscape/url-metrics/www.alinki.com%2Fdomainlinks.php%3Fpage%3D516000?AccessID=XXXXXX&Expires=1286388878&Signature=YYYYYYYYY
Он проходит через CURL и получает ответ от API seoMoz - однако в ответе отсутствуют некоторые данные. Я осмотрелся и обнаружил, что это проблема с тем, как структурирован URL. Например, изменив значение с www.alinki.com%2Fdomainlinks.php%3Fpage%3D516000
на www.alinki.com/domainlinks.php?page=516000
, я могу получить все поля, которые я ищу. Исходя из этой логики, я должен иметь возможность структурировать URL, подобный этому:
(Я удаляю http, так как не могу опубликовать более одной ссылки) lsapi.seomoz.com/linkscape/url-metrics/www.alinki.com/domainlinks.php?page=516000?AccessID=XXXXXX&Expires=1286388878&Signature=YYYYYYYYY
и получить все поля, которые мне нужны. Проблема в том, что когда я пытаюсь передать этот URL через CURL, он не завершит запрос. Ниже приведен код, используемый для запроса CURL:
public static function makeRequest($urlToFetch)
{
$curl_handle = curl_init();
curl_setopt($curl_handle, CURLOPT_URL, "$urlToFetch");
curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, ConnectionUtil::CURL_CONNECTION_TIMEOUT);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
$buffer = curl_exec($curl_handle);
//var_dump($buffer);
curl_close($curl_handle);
$arr = json_decode($buffer);
return $arr;
}
И я прошу следующее:
$urlToFetch = "http://lsapi.seomoz.com/linkscape/url-metrics/" . urlencode($objectURL) . "?" . $this->structureURL();
$response = ConnectionUtil::makeRequest($urlToFetch);
Есть идеи, какую глупую ошибку я совершаю?