CURL Запрос на выпуск - PullRequest
       23

CURL Запрос на выпуск

0 голосов
/ 06 октября 2010

Так что я новичок во всем этом. Я пытаюсь научить себя, как правильно использовать 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);

Есть идеи, какую глупую ошибку я совершаю?

1 Ответ

0 голосов
/ 09 октября 2010

Попробуйте использовать http_build_query вместо urlencode для генерации строки запроса.Похоже, что код seomoz неправильно обрабатывает urlen-кодированные данные.

...