Я разрабатываю плагин 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 и пытаюсь POST с помощью cURL перейти на xyz.com/test.php, в test.php я написал код для записи данных в текстовый файл, чтобы проверить, достигает ли запрос cURL от abc.com на xyz.com или нет. Но он ничего не записывает в текстовый файл, это означает, что запрос от abc.com к xyz.com не приходит. В этом я не получаю никакого ответа, и это продолжает выполняться на abc.com в течение долгого времени.
Итак, мне нужна помощь в выяснении того, что создает эту проблему и как я могу POST данные с abc.com на xyz.com
Веб-сайты или сервер, на котором вы используете плагин, находятся за брандмауэром и, следовательно, блокируют ваш запрос 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, почему он блокирует запрос.