Cloudflare блокирует cURL-запросы к платежному шлюзу api

На работе я пытаюсь отладить клиентский сайт, у которого есть проблемы с их платежным шлюзом rest api. Их провайдер шлюзов использует CloudFlare (он не на стороне клиентского сайта), который блокирует отправку платежных форм, потому что A: ему не нравится заголовок cURL (я уже исправил эту часть, передав вместо него заголовок firefox), и B: Cookies не включены. Эта вторая часть является то, что проблематично. Сервер не хранит куки-файлы, как браузер, и я не знаю, как перехватить ответ куки-файла и передать его обратно с запросом cURL, чтобы обойти противные меры безопасности CloudFlare (не спрашивайте меня, почему платежный шлюз будет иметь он настроен так, что на самом деле это не имеет смысла, и сценарий, который они предоставили для подключения, не работает). Предоставлен раздел скрипта, который делает запрос:

  $ch = curl_init();

// set URL and other appropriate options
curl_setopt($ch, CURLOPT_URL, $gatewayURL);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/xml'));
curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13'); //I added this bit to address the user agent issue, everything else is directly from their script.
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
curl_setopt($ch, CURLOPT_REFERER, $_SERVER['HTTP_REFERER']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$data = curl_exec($ch);
curl_close($ch);

-1

Решение

Ему не нравится заголовок cURL (я уже исправил эту часть, передав
заголовок Firefox вместо)

Хорошо.

Файлы cookie не включены. Эта вторая часть является то, что проблематично.

Чушь собачья.

Так?

Вам нужно включить эту опцию cURL, как показано ниже:

curl_setopt ($ch, CURLOPT_HEADER, true);

Заголовок HTTP придет в ответе. Это ожидаемый момент, чтобы поймать значение cookie. Посмотрите на ниже:

// Firstly
$data = curl_exec ($ch);
curl_close ($ch);

// Secondly
preg_match ('/Cookie: (.*);/', $data, $header);
$cookie = $header[1];

PS: иногда строка заголовка Cookie может быть показана как Set-Cookie вместо. Потому что он может поймать, cookie создается на время отклика.

Отныне вы можете использовать это $ печенья значение в следующих запросах:

  curl_setopt ($ch, CURLOPT_COOKIE, $cookie);

Я надеюсь, что вы все это понимаете. Это может быть очень полезно для вас. Вы также можете посмотреть официальную документацию PHP.

-1

Другие решения

Других решений пока нет …