diff --git a/resolve/google.php b/resolve/google.php new file mode 100644 index 0000000..f497dbf --- /dev/null +++ b/resolve/google.php @@ -0,0 +1,107 @@ +backend = new backend("google"); + + include "lib/fuckhtml.php"; + $this->fuckhtml = new fuckhtml(); + } + + private function get(/*$proxy, */$url, $get = []){ + + $curlproc = curl_init(); + + if($get !== []){ + $get = http_build_query($get); + $url .= "?" . $get; + } + + curl_setopt($curlproc, CURLOPT_URL, $url); + + // http2 bypass + curl_setopt($curlproc, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2_0); + + $headers = + ["User-Agent: " . config::USER_AGENT, + "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", + "Accept-Language: en-US,en;q=0.5", + "Accept-Encoding: gzip, deflate, br, zstd", + "DNT: 1", + "Sec-GPC: 1", + "Connection: keep-alive", + "Upgrade-Insecure-Requests: 1", + "Sec-Fetch-Dest: document", + "Sec-Fetch-Mode: navigate", + "Sec-Fetch-Site: none", + "Sec-Fetch-User: ?1", + "Priority: u=0, i"]; + + // i dont think proxies are necessary here... + //$this->backend->assign_proxy($curlproc, $proxy); + + curl_setopt($curlproc, CURLOPT_ENCODING, ""); // default encoding + curl_setopt($curlproc, CURLOPT_HTTPHEADER, $headers); + + curl_setopt($curlproc, CURLOPT_RETURNTRANSFER, true); + curl_setopt($curlproc, CURLOPT_SSL_VERIFYHOST, 2); + curl_setopt($curlproc, CURLOPT_SSL_VERIFYPEER, true); + curl_setopt($curlproc, CURLOPT_CONNECTTIMEOUT, 30); + curl_setopt($curlproc, CURLOPT_TIMEOUT, 30); + + $data = curl_exec($curlproc); + + if(curl_errno($curlproc)){ + throw new Exception(curl_error($curlproc)); + } + + curl_close($curlproc); + return $data; + } + + function resolve($id){ + + $html = + $this->get( + //$this->backend->get_ip(), + "https://www.google.com/goto", + [ + "url" => $id + ] + ); + + $this->fuckhtml->load($html); + + $a = + $this->fuckhtml + ->getElementsByTagName( + "a" + ); + + if(count($a) === 0){ + + throw new Exception("Failed to find link"); + } + + $link = + $this->fuckhtml + ->getTextContent( + $a[0]["attributes"]["href"] + ); + + if( + preg_match( + '/^https?/', + $link + ) + ){ + + return $link; + } + + throw new Exception("Got malformed link: " . $link); + } +} diff --git a/resolver.php b/resolver.php index 7b8b5ff..ea6ccf4 100644 --- a/resolver.php +++ b/resolver.php @@ -5,7 +5,8 @@ $resolver = new resolver(); class resolver{ public const resolvers = [ - "sc" + "sc", + "google" ]; public function __construct(){ @@ -40,9 +41,13 @@ class resolver{ $resolver = new $scraper(); $link = $resolver->resolve($target); - if(is_string($link)){ + if( + is_string($link) && + !empty($link) + ){ header("Location: {$link}"); + echo 'If your ass is not getting redirected, click here.'; } }catch(Exception $error){ @@ -54,13 +59,13 @@ class resolver{ header("Content-Type: text/plain"); http_response_code(400); - echo $message; + echo htmlspecialchars($message); } public function do404($message){ header("Content-Type: text/plain"); http_response_code(404); - echo $message; + echo htmlspecialchars($message); } } diff --git a/scraper/google.php b/scraper/google.php index b96ada8..74cef38 100644 --- a/scraper/google.php +++ b/scraper/google.php @@ -721,7 +721,7 @@ class google{ $params["tbs"] = rtrim($params["tbs"], ","); } - + /* $data = $this->get( $proxy, "https://www.google.com/search", @@ -730,10 +730,11 @@ class google{ ); $html = &$data["data"]; - $container = &$data["container"]; + $container = &$data["container"];*/ //file_put_contents("scraper/google-jp.html", $html); - //$html = file_get_contents("scraper/google-softcaptcha.html"); + $html = file_get_contents("scraper/dmca.html"); + $container = ""; } $out = [ @@ -914,14 +915,34 @@ class google{ $a["attributes"]["href"] ); + $link_text = + strtolower( + $this->fuckhtml + ->getTextContent($a) + ); + if( - preg_match( - '/^https?:\/\/lumendatabase\.org/', - $link + str_contains( + $link_text, + "complaint" ) ){ - $notices[] = $link; + // sometimes the link is an encrypted redirect, handle redirection securely + if( + preg_match( + '/^\/goto\?url=(.*)/', + $link, + $payload + ) + ){ + + $notices[] = "/resolver?scraper=google&target=" . $payload[1]; + }else{ + + // normal link + $notices[] = $link; + } } }