403 Запрещено при отправке POST-запроса

#php #curl #post #http-status-code-403

#php #curl #Публикация #http-status-code-403

Вопрос:

Добрый вечер, я хотел подключиться к https://accounts.nintendo.com сайт через twitter с помощью cURL, поэтому я сначала сделал запрос GET на странице подключения к сайту nintendo, чтобы получить csrf_token, а затем запрос POST на URL-адрес действия формы сайта nintendo, чтобы подключиться через twitter.

Обычно, когда все идет хорошо, ответный запрос должен отправить меня обратно: 302 Нашел ссылку OAuth для подключения меня через twitter.

Я попытался изменить UserAgent и заголовок

 <?php
include('simple_html_dom.php');

// SHOW THE PAGE TO GET CSRF TOKEN
$ch = curl_init();

$url = 'https://accounts.nintendo.com/login';



curl_setopt_array($ch,
  array(
     CURLOPT_URL => $url,

     CURLOPT_CAINFO => dirname(__FILE__)."/cacert.pem",
     CURLOPT_COOKIESESSION => false,
     CURLOPT_USERAGENT => "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36",
     CURLOPT_HTTPHEADER => array(
       'Host: accounts.nintendo.com',
       'Accept: text/html,application/xhtml xml,application/xml;q=0.9,*/*;q=0.8',
       'Accept-Language: fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3',
       'Pragma: ',

       'Connection: keep-alive',

     ),
     CURLINFO_HEADER_OUT => true,
     CURLOPT_COOKIEFILE => dirname(__FILE__) . "/cookies.txt",
     CURLOPT_COOKIEJAR => dirname(__FILE__) . "/cookies.txt",
     CURLOPT_FRESH_CONNECT => false,


    // The data to transfer with the response.

    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_RETURNTRANSFER => true,


  )
);


$data = curl_exec($ch);


// PARSER THE TOKEN CSRF
$dom = new simple_html_dom();

$html = $dom->load($data);


foreach($html->find('li[class="LoginForm_snsButton LoginForm_snsButton-row LoginForm_snsButton-twitter"] input[name="csrf_token"]') as $element)
{
  $csrf_token = $element->value.'<br/>';

}

curl_close($ch);

//SEND POST REQUEST

$ch2 = curl_init();

$url = 'https://accounts.nintendo.com/federation/twitter';


$postData = array(

  "post_federation_redirect_uri" => "https://accounts.nintendo.com/",
  "post_federation_reauthenticate" => "",
  "redirect_after" => "5",
  "csrf_token" => $csrf_token,
  "display" => ""
);
curl_setopt_array($ch2,
  array(
     CURLOPT_URL => $url,

     CURLOPT_CAINFO => dirname(__FILE__)."/cacert.pem",
     CURLOPT_COOKIESESSION => false,
     CURLOPT_USERAGENT => "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0",


     CURLOPT_COOKIEFILE => dirname(__FILE__) . "/cookies.txt",
     CURLOPT_COOKIEJAR => dirname(__FILE__) . "/cookies.txt",
     CURLOPT_FRESH_CONNECT => false,
     CURLOPT_CUSTOMREQUEST => 'POST',
     CURLOPT_POSTFIELDS => http_build_query($postData),
     CURLINFO_HEADER_OUT => true,
    // The data to transfer with the response.
    CURLOPT_HEADER => true,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_RETURNTRANSFER => true,


  )
);

$exec = curl_exec($ch2);
$header = curl_getinfo($ch2);
echo $header['request_header'].'</br></br></br>';

echo $header['header_size'];

echo $exec;
curl_close($ch2);


?>
 

проблема в том, что я получаю хороший запрет 403 (я не знаю, потому ли это, что я делаю запрос с локального хоста), вот экран, показывающий заголовок запроса, заголовок ответа и содержимое ответа сайта: http://www.noelshack.com/2019-15-6-1555110358-screenshot-1.jpg

Комментарии:

1. Согласно вашему скриншоту и странице входа в систему Nintendo, вам необходимо пройти проверку Google reCAPCTHA, и вы ее не проходите. В результате Nintendo, похоже, выдает 403.

Ответ №1:

Для чего у вас есть разрешение chmod simple_html_dom.php а для вашего сценария ?

Если вы не указали разрешение 644, попробуйте это :

Chmod оба файла с $chmod 644 YourScript.php

И, во втором случае, перезагрузите свой скрипт в своем веб-браузере и дождитесь ошибки 403 и просмотрите свой файл журнала.

  • В случае, если вы используете Apache2, посмотрите /var/log/apache2/error.log
  • В противном случае или если вы используете Nginx, зайдите /var/log/nginx/error.log

Дайте мне ваши результаты, чтобы я мог помочь вам немного лучше. 😉

Комментарии:

1. 403 Forbidden Ошибка исходит от удаленного хоста, в данном случае Nintendo. Изменение прав доступа к файлам скрипта не поможет в этом.

2. Решение loukandreys не работает (кроме того, разрешение chmod не является проблемой). Кроме того, я попытался изменить HTTP-РЕФЕРЕР, но он не изменился :/

3. О, точно, извините, я не видел скриншота. @johannes прав, проблема, похоже, связана с reCAPTCHA от Google. извините за плохой способ

4. @Errorj404 Взгляните на мой комментарий к вашему первоначальному вопросу. Я думаю, что очень маловероятно, что вы сможете передать reCAPCTHA, потому что ваше поведение — это то, что Nintendo хочет предотвратить с помощью reCAPCTHA.

5. 1 @Johannes .. Во-первых, ошибка J404 вы находитесь не на том форуме.. И, во-вторых, если вы зададите этот вопрос, вы далеки от своего конца.. У вас явно нет навыков.