Я пытаюсь установить cookie для моих форумов phpBB со страницы входа в MediaWiki. Используя hook после успешного входа в wiki, я хочу запустить php-скрипт, который устанавливает cookie.
Скрипт работает, когда я запускаю его самостоятельно или когда я использую GET, но по соображениям безопасности я хочу использовать POST для скрипта. Для этого я решил, что curl
будет лучшим вариантом.
К сожалению, даже базовый сценарий выглядит так:
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/ForumLogin.php"); curl_setopt($ch, CURLOPT_HEADER, 0); curl_exec($ch); curl_close($ch);
Дает мне 403 Запретную ошибку. В robots.txt нет правил, которые должны помешать. Что еще я могу попытаться заставить скрипт работать, или есть ли другие способы запуска сценария из MediaWiki?
Я подозреваю, что оправдание этого явно запрещает автоматическое поведение – антибот или общую меру безопасности. Вы можете посмотреть исходный код сайта-адресата и проверить любые такие меры – быстрый поиск кода для «403» может дать некоторое представление. Возможно, даже в случае, если запросы POST не являются законными в этом контексте, и, таким образом, были предотвращены по соображениям безопасности.
Кстати, я не уверен, что вы подразумеваете под «соображениями безопасности». POST не более безопасен, чем GET. Они оба открыты для такого же тщательного изучения.
Для моего конкретного проекта сервер будет вызывать ошибку 403, если возникает ошибка, но все же возвращает данные. Поэтому, чтобы обойти эту проблему, я сделал следующее:
curl_setopt($ch, CURLOPT_FAILONERROR, 0); // Fail on errors
Если вы отключите сбой при ошибках, вы можете получить некоторые данные обратно. Надеюсь, это поможет.
Моим решением было установить параметр «Пользовательский агент», поэтому cURL может претендовать на роль браузера. Примером этой настройки в php является
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6');
Рекомендации:
действовать / запрашивать как реальную попытку "curl / 7.39.0" пользовательский агент
$useragent= "curl/7.39.0"; curl_setopt($ch,CURLOPT_USERAGENT, $useragent);
или попробуйте пользовательские агенты randam из списка массивов браузеров, например
//browser pack start $useragents=array( "Mozilla/5.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/600.1.3 (KHTML, like Gecko) Version/8.0 Mobile/12A4345d Safari/600.1.4", "Mozilla/5.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/600.1.3 (KHTML, like Gecko) Version/8.0 Mobile/12A4345d Safari/600.1.4", "Mozilla/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X; en-us) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53", "Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_2_1 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5", "Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_2_1 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5", "Mozilla/5.0 (iPad; CPU OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53", "Mozilla/5.0 (iPad; CPU OS 4_3_5 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8L1 Safari/6533.18.5", "Mozilla/5.0 (Linux; U; en-us; KFAPWI Build/JDQ39) AppleWebKit/535.19 (KHTML, like Gecko) Silk/3.13 Safari/535.19 Silk-Accelerated=true", "Mozilla/5.0 (Linux; U; en-us; KFTHWI Build/JDQ39) AppleWebKit/535.19 (KHTML, like Gecko) Silk/3.13 Safari/535.19 Silk-Accelerated=true", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-us; Silk/1.0.141.16-Gen4_11004310) AppleWebkit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16 Silk-Accelerated=true", "Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; Nexus S Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1", "Mozilla/5.0 (Linux; Android 4.3; Nexus 7 Build/JSS15Q) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.72 Safari/537.36", "Mozilla/5.0 (Linux; Android 4.2.1; en-us; Nexus 5 Build/JOP40D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19", "Mozilla/5.0 (BB10; Touch) AppleWebKit/537.10+ (KHTML, like Gecko) Version/10.0.9.2372 Mobile Safari/537.10+", "Mozilla/5.0 (Linux; Android 4.3; Nexus 10 Build/JSS15Q) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.72 Safari/537.36", "Mozilla/5.0 (Linux; U; Android 2.3; en-us; SAMSUNG-SGH-I717 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1", "Mozilla/5.0 (Linux; U; Android 4.3; en-us; SM-N900T Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30", "Mozilla/5.0 (Linux; U; Android 4.0; en-us; GT-I9300 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30", "Mozilla/5.0 (Linux; Android 4.2.2; GT-I9505 Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.59 Mobile Safari/537.36", "Mozilla/5.0 (Linux; U; Android 2.2; en-us; SCH-I800 Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36"); //browser pack end $useragent=$useragents[rand()%sizeof($useragents)]; curl_setopt($ch,CURLOPT_USERAGENT, $useragent);