отправка на удаленный сервер с помощью 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
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>";
}
Squid (прокси-сервер) блокирует ваш запрос. Посмотрите в журналах squid, почему он блокирует запрос.