2016-08-23 2 views
0

supermariomakerbookmark.nintendo.net 웹 사이트에서 수집 한 정보를 기반으로 대기열 시스템을 만들려고합니다. 첫째, 필드에 존재하는 CSRF 토큰, 찾을 수있는 URL https://supermariomakerbookmark.nintendo.net/courses/7E00-0000-0220-574B에서 GET 요청합니다PHP cURL을 사용하여 URL에서 CSRF-Token을 가져 와서 같은 세션 내 다른 URL에 게시하십시오.

<meta name="csrf-token" content="xxxxxx"> 

그 후, 나는이 CSRF 토큰 및 전달, https://supermariomakerbookmark.nintendo.net/courses/7E00-0000-0220-574B/play_at_later에 POST 요청을 할 필요를 헤더의 쿠키. 쿠키는 사용자가 제공하며 데이터베이스에서 검색됩니다.

여기 내 코드입니다 :

$cookie = DB::table('CONFIG')->select('cookies')->first()->cookies; 

// get csrf token 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "https://supermariomakerbookmark.nintendo.net/courses/$id"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
$html = curl_exec($ch); 

$dom = new \DOMDocument(); 
libxml_use_internal_errors(true); 
$dom->loadHTML($html); 

$metas = $dom->getElementsByTagName('meta'); 

for ($i = 0; $i < $metas->length; $i++){ 
    $meta = $metas->item($i); 
    if($meta->getAttribute('name') == 'csrf-token') 
    $csrfToken = $meta->getAttribute('content'); 
} 

$headers = array(); 
$headers[] = "X-CSRF-Token: $csrfToken"; 
$headers[] = "Cookie: $cookie"; 

curl_setopt($ch, CURLOPT_URL, "https://supermariomakerbookmark.nintendo.net/courses/$id/play_at_later"); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 

$ret = curl_exec($ch); 

그러나 컬 POST 요청이 대신 200 OK의 사용자 지정 500 오류 페이지를 반환, 작동하지 않습니다. Laravel의 컨트롤러에서이 코드를 실행하고 있습니다.

우편 배달부를 사용하여 POST 요청을 작성하면 작동합니다. 어떻게 작동하게 만드는지에 대한 개미 이데올로기?

+0

는 컬 요청이 500을 반환하거나 자체가 500을 반환이 PHP 파일이 있습니까? – WillardSolutions

+0

죄송합니다. 예상 된 200 OK 상태 대신에 사용자 정의 500 오류 페이지가 컬 POST 요청의 응답으로 표시됩니다. –

+0

아마 아마 관련이 없지만,'$ cookie' 헤더는 실제로 같은 'X-CSRF-Token'키를 가지고 있다고 생각합니까? – WillardSolutions

답변

0

다른 웹 서비스에서 비슷한 문제가있었습니다. 제 경우에는 문제가 헤더의 이름이었습니다.

그것을이 코드를 변경하고 테스트 해보십시오 :

$headers = array(); 
$headers[] = "Cookie: X-CSRF-Token=$csrfToken"; 
$headers[] = "Cookie: X-CSRF-Token=$cookie"; 
+0

Didn't worked :/ 그리고 단지 업데이트로, 나는 인터셉터가 활성화 된 경우에만 우편 배달부에서 작동하도록 할 수 있음을 알았습니다. –