Проблема с cURL - PullRequest
       18

Проблема с cURL

0 голосов
/ 26 мая 2011

Я столкнулся со странной проблемой.

У меня есть несколько простых строк кода CURL для вызова службы API.Этот код прекрасно работает при запуске Drupal (в php-файле в браузере и cli), но когда файл включен в Drupal (после начальной загрузки), он работает почтительно.

В нормальных условиях результатВозвращенный службой API имеет много результатов, но при запуске в Drupal он возвращает только один результат.

Я подозреваю, что Drupal изменяет настройку, используемую CURL, которая меняет понимание API вызова.

Кто-нибудь знает, чем может быть вызвана проблема?

Приведенный ниже код взят из наших файлов классов API, написанных в общей библиотеке.Мы планируем использовать их в будущем в других проектах PHP.

Вот код:

$params = array(
  'domain' => array(
    'www.domain1.com',
    'www.domain2.info',
    'www.domain3.in.th',
    'www.domain4.com',
    'www.domain5.in',
  )
);

$ch = curl_init();
curl_setopt_array($ch, array(
  CURLOPT_URL => 'http://api.postrank.com/v2/domain/activity?appkey=123456&format=json',
  CURLOPT_HEADER => false,
  CURLOPT_CONNECTTIMEOUT => 30,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_SSL_VERIFYPEER => false,
  CURLOPT_POST => true,
  CURLOPT_POSTFIELDS => http_build_query($params)
));
$response = curl_exec($ch);
$err = curl_errno($ch);
curl_close($ch);

print_r($response);

ОБНОВЛЕНИЕ 1: выходные данные из CURLOPT_VERBOSE и curl_getinfo

Версия CLI:

* About to connect() to api.postrank.com port 80 (#0)
*   Trying 75.101.138.238... * connected
* Connected to api.postrank.com (75.101.138.238) port 80 (#0)
> POST /v2/domain/activity?appkey=123456&format=json HTTP/1.1
Host: api.postrank.com
Accept: */*
Content-Length: 159
Content-Type: application/x-www-form-urlencoded

 http://api.postrank.com/v2/domain/activity?appkey=123456&format=json
    [content_type] => text/javascript
    [http_code] => 200
    [header_size] => 172
    [request_size] => 355
    [filetime] => -1
    [ssl_verify_result] => 0
    [redirect_count] => 0
    [total_time] => 0.968
    [namelookup_time] => 0
    [connect_time] => 0.437
    [pretransfer_time] => 0.437
    [size_upload] => 159
    [size_download] => 998
    [speed_download] => 1030
    [speed_upload] => 164
    [download_content_length] => 998
    [upload_content_length] => 0
    [starttransfer_time] => 0.968
    [redirect_time] => 0
)

Drupal Версия:

* About to connect() to api.postrank.com port 80 (#0)
*   Trying 75.101.138.238... * connected
* Connected to api.postrank.com (75.101.138.238) port 80 (#0)
> POST /v2/domain/activity?appkey=123456&format=json HTTP/1.1
Host: api.postrank.com
Accept: */*
Content-Length: 175
Content-Type: application/x-www-form-urlencoded

 http://api.postrank.com/v2/domain/activity?appkey=123456&format=json
    [content_type] => text/javascript
    [http_code] => 200
    [header_size] => 172
    [request_size] => 371
    [filetime] => -1
    [ssl_verify_result] => 0
    [redirect_count] => 0
    [total_time] => 0.905
    [namelookup_time] => 0
    [connect_time] => 0.437
    [pretransfer_time] => 0.437
    [size_upload] => 175
    [size_download] => 126
    [speed_download] => 139
    [speed_upload] => 193
    [download_content_length] => 126
    [upload_content_length] => 0
    [starttransfer_time] => 0.905
    [redirect_time] => 0
)

1 Ответ

1 голос
/ 29 мая 2011

Ответ состоял в том, что Drupal изменяет «&» в строке запроса на «&», а удаленная служба API обрабатывает только разделитель аргументов «&», а не «&». Поэтому, естественно, когда он разделял данные поста, он правильно получал только первый параметр в массиве.

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