首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Garmin Connect登录php

Garmin Connect登录php
EN

Stack Overflow用户
提问于 2014-03-22 22:02:20
回答 1查看 1.6K关注 0票数 0

试图使用他们的新的SSO方法对garmin connect进行身份验证,但我一直被卡住了。我在这里发现了一种在python中工作的方法:

https://github.com/cpfair/tapiriik/commit/1604a1c791def072a48f3165dd61d5136f3610ce

到目前为止我的代码是:

代码语言:javascript
复制
$url = "https://sso.garmin.com/sso/login?service=http%3A%2F%2Fconnect.garmin.com%2Fpost-auth%2Flogin&webhost=olaxpw-connect04.garmin.com&source=http%3A%2F%2Fconnect.garmin.com%2Fen-US%2Fsignin&redirectAfterAccountLoginUrl=http%3A%2F%2Fconnect.garmin.com%2Fpost-auth%2Flogin&redirectAfterAccountCreationUrl=http%3A%2F%2Fconnect.garmin.com%2Fpost-auth%2Flogin&gauthHost=https%3A%2F%2Fsso.garmin.com%2Fsso&locale=en_US&id=gauth-widget&cssUrl=https%3A%2F%2Fstatic.garmincdn.com%2Fcom.garmin.connect%2Fui%2Fcss%2Fgauth-custom-v1.0-min.css&clientId=GarminConnect&rememberMeShown=true&rememberMeChecked=false&createAccountShown=true&openCreateAccount=false&usernameShown=true&displayNameShown=false&consumeServiceTicket=false&initialFocus=true&embedWidget=false";
$page = file_get_contents($url);
//echo $page;
   $username = '********';
$password = '************';

preg_match("/flowExecutionKey:\s\[(.*)-->/",$page,$m);
$flow = trim(str_replace(']','',$m[1]));
$ch = curl_init('https://sso.garmin.com/sso/login?service=http://connect.garmin.com/post-auth/login&clientID=GarminConnect&consumeServiceTicket=false');
curl_setopt( $ch, CURLOPT_URL, $url );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt( $ch, CURLOPT_ENCODING, "gzip" );
curl_setopt( $ch, CURLOPT_COOKIEFILE, $cookie_file );
curl_setopt( $ch, CURLOPT_COOKIEJAR, $cookie_file );
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 1 );
$query = http_build_query(array('username'=>$username,'password'=>$password,'embed'=>'true','_eventID'=>'submit','lt'=>$flow));
curl_setopt($ch, CURLOPT_POSTFIELDS,$query);
$output = curl_exec($ch);
$http_status = curl_getinfo($url, CURLINFO_HTTP_CODE);
curl_close($ch);
var_dump($http_status);
var_dump($output);

我能够在没有问题的情况下获得流执行键,但是当我将它与所需的字段一起发布时,我将完全没有输出。

EN

回答 1

Stack Overflow用户

发布于 2014-03-23 06:51:41

首先尝试从代码中删除这一行,然后再运行一次。您在这里再次设置了先前的url。所以把它抹去。

代码语言:javascript
复制
curl_setopt( $ch, CURLOPT_URL, $url );

如果仍然不起作用,那么.

您正在使用$page = file_get_contents($url);浏览登录页面,因此在此调用期间来自站点的任何cookie都不会存储在您的$cookie_file中。

因此,不要调用那个file_get_contents函数,而是使用curl使用相同的cookie文件来获取html。

代码语言:javascript
复制
$login = curl_init();
curl_setopt( $login, CURLOPT_URL, $url );
curl_setopt( $login, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt( $login, CURLOPT_ENCODING, "" );
curl_setopt( $login, CURLOPT_COOKIEFILE, $cookie_file );
curl_setopt( $login, CURLOPT_COOKIEJAR, $cookie_file );
curl_setopt( $login, CURLOPT_FOLLOWLOCATION, 1 );
curl_setopt( $login, CURLOPT_SSL_VERIFYPEER,false);
$page= curl_exec($login);
curl_close($login);

如果仍然不能工作,那么添加这一行与您的第二个curl调用。

代码语言:javascript
复制
curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER,false);

最后,使用curl_setopt( $ch, CURLOPT_VERBOSE,true);查看一下自己在调试curl在做什么。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22584198

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档