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

StackOverflow https://stackoverflow.com/questions/815910

  •  03-07-2019
  •  | 
  •  

Вопрос

Практически любой работающий 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, поскольку он гарантирует, что я вижу неизмененную правду, а также отображаю необработанные данные постов.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top