Хорошо, проблема в том, что вы не вошли в систему, если вы вошли в систему аутентификации OAuth перенаправляет на пустую страницу с ваш код, но если вы этого не сделаете, нет НИКАКОГО REDIRECT и он покажет вам html-страницу с логином.
Для того, чтобы получить этот код, вы должны войти в систему, вы можете войти в систему, используя свой браузер, а затем получить куки-файлы из своего браузера и использовать их в своем коде. Эта опция хороша, если вам нужен только этот код для тестирования.
Вторые варианты сложнее, вы должны сделать логин программным путем, что подразумевает более одного завитка, сохранение файлов cookie и отправка их на следующий запрос. Я сделал пример для этой аутентификации OAuth, в частности, что, по крайней мере, работает для меня. Является довольно уродливым, но в порядке, как доказательство концепции.
<?php
$email = "myemailorphone";
$pass = "mypassword";
$id = "myID";
//this url returns a login page
$url= "https://oauth.vk.com/authorize?".http_build_query(["client_id"=>$id,"scope"=>"MyWall","redirect_uri"=>"https://oauth.vk.com/blank.html","response_type"=>"code"]);
$b64url = str_replace("==","--",base64_encode($url)); //different base64 code, just to have all parameters
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
//curl_setopt($ch,CURLOPT_NOBODY,true);
curl_setopt($ch, CURLOPT_USERAGENT,"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$result = curl_exec($ch);
curl_close($ch);
$cookieString = "";
if(strpos($result,"log in")) {
//get all the cookies
preg_match_all('/^Set-Cookie:\s*([^;]*)/mi', $result, $matches);
$cookies = array();
foreach($matches[1] as $item) {
parse_str($item, $cookie);
$cookies = array_merge($cookies, $cookie);
}
$cookieString = "";
foreach($cookies as $key=>$val){
$cookieString .= $key."=".$val.";";
}
//CREATE LOGIN POST
$ip_h = explode("name=\"ip_h\" value=\"",$result);
$ip_h = substr($ip_h[1],0,18); // some hidden fields on that page, maybe important
$lg_h = explode("name=\"lg_h\" value=\"",$result);
$lg_h = substr($lg_h[1],0,18); // some hidden fields on that page, maybe important
$fields = [
"origin"=>"https://oauth.vk.com",
"to"=>$b64url, // this is where it redirects after login, not used in the php code but, just for the request
"email"=>$email,//phone or email of user
"expire"=>0,
"pass"=>$pass, //your password
"ip_h"=>$ip_h,
"lg_h"=>$lg_h
];
$post = http_build_query($fields);
$login_url = "https://login.vk.com/?act=login&soft=1";
$ch = curl_init($login_url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Cookie: '.$cookieString));
curl_setopt($ch, CURLOPT_USERAGENT,"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
//get the new cookies
$result = curl_exec($ch);
preg_match_all('/^Set-Cookie:\s*([^;]*)/mi', $result, $matches);
$login_cookies = array();
foreach($matches[1] as $item) {
parse_str($item, $cookie);
$login_cookies = array_merge($login_cookies, $cookie);
}
foreach($login_cookies as $key=>$val){
$cookieString .= $key."=".$val.";";
}
//get next location redirect
preg_match_all('/^Location:\s*(.*)/mi', $result, $matches);
$first_redirect = str_replace("\"","_",$matches[1][0]);
$first_redirect = filter_var($first_redirect,FILTER_SANITIZE_URL); //sanitize url, because it returns unwanted chars
//use the second location redirect
$ch = curl_init($first_redirect);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT,"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Cookie: '.$cookieString,"accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"));
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$result = curl_exec($ch);
curl_close($ch);
//last location forward
preg_match_all('/^Location:\s*(.*)/mi', $result, $matches);
$second_redirect = str_replace("\"","_",$matches[1][0]);
$second_redirect = filter_var($second_redirect,FILTER_SANITIZE_URL);
$ch = curl_init($second_redirect);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT,"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Cookie: '.$cookieString,"accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"));
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$result = curl_exec($ch);
curl_close($ch);
preg_match_all('/^Location:\s*(.*)/mi', $result, $matches);
$blank = str_replace("\"","_",$matches[1][0]);
$blank = filter_var($blank,FILTER_SANITIZE_URL);
echo "Blank url: ".$blank;
}
?>
Можете ли вы разместить код, в котором вы делаете запрос на завивание? – Sinjuice
Да, я просто сделал это –