Какие шаги вы предпринимаете для устранения проблем с PHP cURL? - PullRequest
12 голосов
/ 03 мая 2009

Практически любой работающий PHP-программист сталкивался с необходимостью использовать CURL для отправки необработанных HTTP-запросов, будь то для обработки платежей по кредитным картам, злонамеренного копирования экрана или чего-то промежуточного.

Практически на любом форуме, где собираются программисты PHP, есть большое количество людей, которые не могут заставить функции cURL делать то, что они хотят .

Когда cURL не работает для вас, какие методы устранения неполадок вы используете, чтобы выяснить, почему он не работает? С какими странными ошибками в реализации curl в PHP вы сталкивались? Если кто-то задает вопрос «HALP MY CURL IZ BROKEN» на форуме, какие шаги вы предпринимаете, чтобы выяснить, почему его запрос не работает?

Ответы [ 2 ]

15 голосов
/ 03 мая 2009

Я считаю параметр CURLINFO_HEADER_OUT очень полезным.

<?php
$curl = curl_init('http://www.php.net');

curl_setopt($curl, CURLOPT_HEADERFUNCTION, 'dbg_curl_data');
curl_setopt($curl, CURLOPT_WRITEFUNCTION, 'dbg_curl_data');
curl_setopt($curl, CURLINFO_HEADER_OUT, true);

curl_exec($curl);

echo '<fieldset><legend>request headers</legend>
  <pre>', htmlspecialchars(curl_getinfo($curl, CURLINFO_HEADER_OUT)), '
'; echo '
ответ
', htmlspecialchars(dbg_curl_data(null)), '
'; function dbg_curl_data ($ curl, $ data = null) { статический $ buffer = ''; if (is_null ($ curl)) { $ r = $ буфер; $ buffer = ''; вернуть $ r; } еще { $ buffer. = $ data; возврат strlen ($ data); } }
3 голосов
/ 03 мая 2009

На самом деле, я никогда не использую CURL (в php). API-интерфейс PHP-потока намного удобнее и может быть использован для POST-данных. У Wez Furlong есть статья об этом.

Если бы я использовал это? Я бы начал с включения всех сообщений (настройка сообщения об ошибках на E_ALL). Если я обнаружу, что PHP не сообщает мне, что мне нужно в сообщениях об ошибках, я бы, вероятно, использовал прокси-подход, чтобы увидеть, что на самом деле происходит. Изменение целевого URL на локальную страницу php, содержащую что-то вроде

<?php
var_dump($_POST);
var_dump($_GET);
var_dump($_SERVER);

это один из способов. Другой способ - использовать утилиту типа netcat для прослушивания порта 80 и отправки запроса туда:

netcat -l -p 80

Это ничего не вернет для скручивания, но позволит вам точно увидеть, что отправляется на сервер, что может быть достаточно для диагностики проблемы.

Вы также можете извлечь заголовки из PHP с помощью функции apache_request_headers () . В большинстве случаев я предпочитаю подход netcat, поскольку он гарантирует, что я вижу неизмененную правду, а также отображаю необработанные данные постов.

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