отправка на удаленный сервер с помощью cURL с сервера, использующего прокси-сервер/брандмауэр


Я разрабатываю плагин wordpress, который отправляет данные на удаленный сервер с помощью cURL. Это прекрасно работает на максимальном количестве веб-сайтов, но на некоторых веб-сайтах просто появляется сообщение об ОШИБКЕ "ОТКАЗАНО в ДОСТУПЕ".

    [headers] => Array
    (
        [server] => squid/3.3.8
        [mime-version] => 1.0
        [date] => Tue, 31 Mar 2015 07:32:51 GMT
        [content-type] => text/html
        [content-length] => 3406
        [x-squid-error] => ERR_ACCESS_DENIED 0
        [vary] => Accept-Language
        [content-language] => en
        [x-cache] => MISS from hproxy2.world4you.com
        [x-cache-lookup] => NONE from hproxy2.world4you.com:3128
        [via] => 1.1 hproxy2.world4you.com (squid/3.3.8)
        [connection] => close
    )

Выше приведен ответ, который я получаю.

Ниже приведен код, который я использую

    function testpost($ac,$d_name,$an,$data) {
        $fields = '';
        foreach ($data as $key => $value) {
            $fields .= $key . '=' . $value . '&';
        }

        rtrim($fields, '&');
    $post = curl_init();
    curl_setopt($post, CURLOPT_RETURNTRANSFER,true);
    curl_setopt($post, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
    curl_setopt($post, CURLOPT_URL, $ac);
    curl_setopt($post, CURLOPT_POST, count($data));
    curl_setopt($post, CURLOPT_POSTFIELDS, $fields);
    curl_setopt($post, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($post, CURLOPT_SSL_VERIFYHOST, 2);
    $result = curl_exec($post);
    echo "<pre>";
    print_r($result);
    echo "</pre>";      

}

Кроме того, на каком-то сервере он продолжает выполняться и ничего не возвращает. Для тех, кто не может понять, в чем проблема, и даже не может показать пользователю какое-либо сообщение об ошибке, потому что он ничего не возвращает.

Например. Если я установлю плагин на abc.com и попробуйте опубликовать с помощью cURL, чтобы xyz.com/test.php, в test.php Я написал код для передачи данных в текстовый файл, чтобы проверить запрос CURL от abc.com тянется дальше xyz.com или нет. Но он ничего не записывает в текстовый файл, что означает, что запрос не поступает от abc.com чтобы xyz.com . В этом я не получаю никакого ответа, и он продолжает выполняться abc.com в течение долгого времени.

Итак, мне нужна помощь в выяснении что создает эту проблему и как я могу ПУБЛИКОВАТЬ данные из abc.com чтобы xyz.com

Author: user2231113, 2015-04-06

2 answers

Веб-сайты или сервер, на котором вы используете свой плагин, находятся за брандмауэром, и, следовательно, он блокирует ваш запрос cURL. Чтобы преодолеть это, пользователь этого плагина должен передать настройки своего прокси-сервера. Смотрите ниже -

    function testpost($ac,$d_name,$an,$data,$proxy_ip,$proxy_port,$login_passw) {
    $fields = '';
    foreach ($data as $key => $value) {
        $fields .= $key . '=' . $value . '&';
    }

    rtrim($fields, '&');
$post = curl_init();
curl_setopt($post, CURLOPT_RETURNTRANSFER,true);
curl_setopt($post, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($post, CURLOPT_URL, $ac);
curl_setopt($post, CURLOPT_POST, count($data));
curl_setopt($post, CURLOPT_POSTFIELDS, $fields);
curl_setopt($post, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($post, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($post, CURLOPT_PROXYPORT, $proxy_port);
curl_setopt($post, CURLOPT_PROXYTYPE, 'HTTP');
curl_setopt($post, CURLOPT_PROXY, $proxy_ip);
curl_setopt($post, CURLOPT_PROXYUSERPWD, $login_passw);
$result = curl_exec($post);
echo "<pre>";
print_r($result);
echo "</pre>";      

}

 1
Author: Rajinder Chandel, 2015-04-07 05:28:36

Squid (прокси-сервер) блокирует ваш запрос. Посмотрите в журналах squid, почему он блокирует запрос.

 0
Author: mathieu, 2015-04-06 12:44:41