Экранирование символов в запросе curl

646
02 июня 2017, 13:50

Добрый вечер, у меня проблема с POST запросом на CURL.

CURL запрос мне возвращает ответ:

Failed to connect to ipaytest.arca.am port 8445: Connection refused

Но тот же самый запрос если я делаю просто в браузере как GET запрос то мне возвращает желаемый ответ. Можете сказать что я делаю не так?

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

Вот мой CURL код на PHP:

$args = array(
    'userName' => 'test',
    'password' => 'test',
    'orderNumber' => '16_5',
    'amount' => 1000,
    'returnUrl' => SHOP_URL . '?wc-api=wc_acbapayment&acbapayment=result&order_id=' . $order_id . $extra_url_param,
);
$acbacurl = curl_init();
if ($acbacurl) {$this->acba_logger('276curl-yes');}else{$this->acba_logger('276curl-no');};
$c=curl_setopt_array($acbacurl, array(
    CURLOPT_URL => $action_adr,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => http_build_query($args)
));
if( ! $response = curl_exec($acbacurl))
{
    $this->acba_logger('285curl_error:'.curl_error($acbacurl));exit('Error '.curl_error($acbacurl));
}
//$response = curl_exec($acbacurl);
curl_close($acbacurl);
$response = json_decode($response, true);

А вот тот же самый запрос на GET который работает нормально:

https://ipaytest.arca.am:8445/payment/rest/register.do?userName=test&password=test&orderNumber=16_12&amount=1000&returnUrl=https%3A%2F%2Fblog.studentstesting.com%2F%3Fwc-api%3Dwc_acbapayment%26acbapayment%3Dresult%26order_id%3D16%26wc-callb%3Dcallback_function
Answer 1

Если через браузер проходит,а браузер кодирует GET параметры,то и вам строит их кодировать при POST запросе.Смотреть urlencode() функцию.

Для начала все это можно потестить элементарно,создав HTML форму и заполнить инпутами.

<form class="arca__form" action="https://ipaytest.arca.am:8445/payment/rest/register.do" method="post">
    <?php
        foreach ($args as $key => $value) {
            echo "<input type='text' nmae='{$key}' value='".urlencode($value)."' />";
        }
    ?>
    <input type='submit'/>
</form>

Сделать Ajax запрос:

<script>
    $('.arca__form').on('submit',function(e){
        e.preventDfault();
        $.ajax({
            url: $(this).attr('action'),
            mthod: $(this).attr('method'),
            dataType: 'json',
            data: $(this).serializeArray(),
            success:function(data){
                console.log(data);
            }
        });
    });
</script>

И если получится то либо продолжать в этом духе,либо все это эмулировать через CURL.Тут я намекаю на посылаемые заголовки которые отправляются при form submit.

READ ALSO
Интересная задача на с++ [требует правки]

Интересная задача на с++ [требует правки]

Построить программу, которая вводит координаты точки (x, y) и определяет, попадает точка в заштрихованную область на рисунке, который соответствует...

215
MS Visual Studio C++ - приложения без .NET

MS Visual Studio C++ - приложения без .NET

Всем доброго времени суток!

252