Какие шаги вы предпринимаете для устранения проблем с PHP cURL?
Вопрос
Практически любой работающий PHP-программист сталкивался с необходимостью использовать CURL для отправки необработанных HTTP-запросов, будь то обработка платежа по кредитной карте, злонамеренный просмотр экрана или что-то промежуточное.
Практически на любом форуме, где собираются программисты на PHP, есть большое количество людей, которые не могут заставить функции cURL делать то, что они хотят . р>
Когда cURL не работает для вас, какие методы устранения неполадок вы используете, чтобы выяснить, почему он не работает? С какими странными ошибками в реализации curl в PHP вы сталкивались? Если кто-то спросит: «ПОЛУЧИТЕ МОЮ КУРЛ ИЗ БРОШЕНОЙ» вопрос на форуме, какие шаги вы предпринимаете, чтобы выяснить, почему их запрос не работает?
Решение
Я считаю, что опция 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)), '</pre> </fieldset>'; echo '<fieldset><legend>response</legend> <pre>', htmlspecialchars(dbg_curl_data(null)), '</pre> </fieldset>'; function dbg_curl_data($curl, $data=null) { static $buffer = ''; if ( is_null($curl) ) { $r = $buffer; $buffer = ''; return $r; } else { $buffer .= $data; return strlen($data); } }
Другие советы
На самом деле, я никогда не использую CURL (в php). API-интерфейс PHP-потока намного удобнее и может быть использован для POST-данных. У Вез Фарлонг есть статья на эту тему. р>
Если бы я использовал это? Я бы начал с включения всех сообщений (настройка сообщения об ошибках на E_ALL). Если я обнаружу, что PHP не сообщает мне, что мне нужно в сообщениях об ошибках, я бы, вероятно, использовал прокси-подход, чтобы увидеть, что на самом деле происходит. Изменение целевого URL на локальную страницу php, содержащую что-то вроде
<?php
var_dump( На самом деле, я никогда не использую CURL (в php). API-интерфейс PHP-потока намного удобнее и может быть использован для POST-данных. У Вез Фарлонг есть статья на эту тему. р>
Если бы я использовал это? Я бы начал с включения всех сообщений (настройка сообщения об ошибках на E_ALL). Если я обнаружу, что PHP не сообщает мне, что мне нужно в сообщениях об ошибках, я бы, вероятно, использовал прокси-подход, чтобы увидеть, что на самом деле происходит. Изменение целевого URL на локальную страницу php, содержащую что-то вроде
netcat -l -p 80
это один из способов. Другой способ - использовать утилиту типа netcat для прослушивания порта 80 и отправки запроса туда:
<*>
Это ничего не вернет для скручивания, но позволит вам точно увидеть, что отправляется на сервер, что может быть достаточно для диагностики проблемы. Р>
Вы также можете извлечь заголовки из PHP, используя apache_request_headers. () функция. В большинстве случаев я предпочитаю подход netcat, поскольку он гарантирует, что я вижу неизмененную правду, а также отображаю необработанные данные постов.
POST);
var_dump( На самом деле, я никогда не использую CURL (в php). API-интерфейс PHP-потока намного удобнее и может быть использован для POST-данных. У Вез Фарлонг есть статья на эту тему. р>
Если бы я использовал это? Я бы начал с включения всех сообщений (настройка сообщения об ошибках на E_ALL). Если я обнаружу, что PHP не сообщает мне, что мне нужно в сообщениях об ошибках, я бы, вероятно, использовал прокси-подход, чтобы увидеть, что на самом деле происходит. Изменение целевого URL на локальную страницу php, содержащую что-то вроде
<*>
это один из способов. Другой способ - использовать утилиту типа netcat для прослушивания порта 80 и отправки запроса туда:
<*>
Это ничего не вернет для скручивания, но позволит вам точно увидеть, что отправляется на сервер, что может быть достаточно для диагностики проблемы. Р>
Вы также можете извлечь заголовки из PHP, используя apache_request_headers. () функция. В большинстве случаев я предпочитаю подход netcat, поскольку он гарантирует, что я вижу неизмененную правду, а также отображаю необработанные данные постов.
GET);
var_dump( На самом деле, я никогда не использую CURL (в php). API-интерфейс PHP-потока намного удобнее и может быть использован для POST-данных. У Вез Фарлонг есть статья на эту тему. р>
Если бы я использовал это? Я бы начал с включения всех сообщений (настройка сообщения об ошибках на E_ALL). Если я обнаружу, что PHP не сообщает мне, что мне нужно в сообщениях об ошибках, я бы, вероятно, использовал прокси-подход, чтобы увидеть, что на самом деле происходит. Изменение целевого URL на локальную страницу php, содержащую что-то вроде
<*>
это один из способов. Другой способ - использовать утилиту типа netcat для прослушивания порта 80 и отправки запроса туда:
<*>
Это ничего не вернет для скручивания, но позволит вам точно увидеть, что отправляется на сервер, что может быть достаточно для диагностики проблемы. Р>
Вы также можете извлечь заголовки из PHP, используя apache_request_headers. () функция. В большинстве случаев я предпочитаю подход netcat, поскольку он гарантирует, что я вижу неизмененную правду, а также отображаю необработанные данные постов.
SERVER);
это один из способов. Другой способ - использовать утилиту типа netcat для прослушивания порта 80 и отправки запроса туда:
<*>Это ничего не вернет для скручивания, но позволит вам точно увидеть, что отправляется на сервер, что может быть достаточно для диагностики проблемы. Р>
Вы также можете извлечь заголовки из PHP, используя apache_request_headers. () функция. В большинстве случаев я предпочитаю подход netcat, поскольку он гарантирует, что я вижу неизмененную правду, а также отображаю необработанные данные постов.