首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >谷歌硬盘OAuth => response=Moved

谷歌硬盘OAuth => response=Moved
EN

Stack Overflow用户
提问于 2014-09-04 02:04:44
回答 1查看 1K关注 0票数 0

我正在尝试编写一个小型PHP代码,它应该能够对Google帐户进行身份验证,然后将一个文件上传到它的Google。

这一过程应分两个步骤进行:

  1. 发送身份验证请求并交换授权代码
  2. 发布授权代码并交换用于向Google发送其他请求(eq:文件上载)的访问令牌

注意,通过使用Google客户端库,一切工作都很顺利。

我想要实现的是不使用Google,而是使用描述这里的简单身份验证步骤。

通过使用前面提到的这些身份验证步骤,我发送了一个请求:

Id=[我的客户id]

作为交换,重定向页面应该包含"code=xxxx“参数,例如:

http://example.com?code=xxx

其中xxx是由Google加到上面提到的redirect_uri的授权代码。

问题是,谷歌返回一个错误消息,比如临时移动,还提供了一个链接“文档移动了这里”。如果我点击那个链接,那么一切都很好。

但我不希望用户干预,因为这段代码在服务器级别工作,而不是在客户端级别。

如何解决这个?请不要回答“使用谷歌客户端库!”因为我已经说过这样做会有效,但我不希望Google客户端库依赖!

我的PHP代码是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$CLIENT_ID = '[the client ID from Google Developer Console]';
$CLIENT_SECRET = '[the client secret from Google Developer Console]';
$REDIRECT_URI = 'http' . ($_SERVER['SERVER_PORT'] == 80 ? '' : 's') . '://' . $_SERVER['SERVER_NAME'] . $_SERVER['SCRIPT_NAME'];

$ch = curl_init();

if (isset($_GET['code']))
{
    $url = 'https://accounts.google.com/o/oauth2/token';

    $post_fields = 'code=' . $_GET['code'] . '&client_id=' . $CLIENT_ID . '&client_secret=' . $CLIENT_SECRET . '&redirect_uri='
            . $REDIRECT_URI . '&grant_type=authorization_code';
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER,
            array('Host:accounts.google.com', 'Content-Type:application/x-www-form-urlencoded', 'Content-Length:' . strlen($post_fields))
    );

}
else
{
    $url = sprintf('https://accounts.google.com/o/oauth2/auth?scope=email%%20profile&redirect_uri=%s&response_type=code&client_id=%s',
            $REDIRECT_URI, $CLIENT_ID
    );

}

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);

$result = curl_exec($ch);

$error_no = curl_errno($ch);
curl_close($ch);

echo $result;
?>
EN

回答 1

Stack Overflow用户

发布于 2014-09-04 02:49:34

这类问题的解决方案是

  • 不要通过CURL调用第一个请求,而是通过更改文档位置来调用

还请更改此块:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
...
else
{
    $url = sprintf('https://accounts.google.com/o/oauth2/auth?scope=email%%20profile&redirect_uri=%s&response_type=code&client_id=%s',$REDIRECT_URI, $CLIENT_ID);
}

有了这个:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
...
else
{
    $url = sprintf('https://accounts.google.com/o/oauth2/auth?scope=email%%20profile&redirect_uri=%s&response_type=code&client_id=%s',$REDIRECT_URI, $CLIENT_ID);
    header('Location:'.$url);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25662642

复制
相关文章
【Go API 开发实战 3】API 流程和代码结构
为了使读者在开始实战之前对 API 开发有个整体的了解,这里选择了两个流程来介绍:
腾讯技术工程官方号
2019/05/16
1.7K0
【Go API 开发实战 3】API 流程和代码结构
数据结构 API
数据结构就是为工作选择正确的工具。您需要以有序的方式存储数据,还是只需要能够快速存储和检索数据?什么对您的用例更重要:数据结构执行的速度有多快,或者它占用多少内存?不同的数据结构都有优点、缺点和用例,这就是存在不同数据结构的全部原因!
IT千锋教育
2023/06/20
1580
API和Web Api
API(应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。
岳泽以
2022/10/26
2.5K0
【数据结构】实现字典API:有序数组和无序链表
根据文章内容总结摘要
啦啦啦321
2018/01/03
1.3K0
【数据结构】实现字典API:有序数组和无序链表
初识 Kubernetes API 的组织结构
话说自己入坑云原生也有好几年了,但是对 kubernetes 基础认识却不够深,导致写代码的时候经常需要打开 godoc 或者 kubernetes 源码查看某个接口或者方法的定义。这种快餐式的消费代码方式可以解决常见的问题,但有时候却会被一个简单的问题困扰很久。究其原因,还是没有对 kubernetes 有比较系统的学习,特别对于 kubernetes API 的设计与原理没有较为深入的认识,这也是我们平时扩展 kubernetes 功能绕不开的话题。与此同时,这也是很难讲清楚的一个话题,是因为 kubernetes 经过多个版本的迭代功能已经趋于成熟与复杂,这一点也可以从 Github 平台 kubernetes 组织下的多个仓库也可以看得出来,相信很多人和我一样,看到 kubernetes、client-go、api、apimachinery 等仓库就不知道如何下手。事实上,从 API 入手是比较简单的做法,特别是我们对于 kubernetes 核心组件的功能有了一定的了解之后。
米开朗基杨
2021/03/16
1.5K0
TensorFlow高阶API和低阶API
TensorFlow提供了众多的API,简单地可以分类为高阶API和低阶API. API太多太乱也是TensorFlow被诟病的重点之一,可能因为Google的工程师太多了,社区太活跃了~当然后来Google也意识到这个问题,在TensorFlow 2.0中有了很大的改善。本文就简要介绍一下TensorFlow的高阶API和低阶API使用,提供推荐的使用方式。
用户7164815
2020/04/08
2.2K0
TensorFlow高阶API和低阶API
TensorFlow2.0+的API结构梳理
本文梳理了tf 2.0以上版本的API结构,用于帮助国内的初学者更好更快的了解这个框架,并为检索官方的API文档提供一些关键词。
孔西皮
2021/03/18
8820
REST API和SOAP API区别[通俗易懂]
REST API 优点: 1. 轻量级的解决方案,不必向SOAP那样要构建一个标准的SOAP XML。 2. 可读性比较好:可以把URL的名字取得有实际意义。 3. 不需要SDK支持:直接一个Http请求就可以,但是SOAP则可能需要使用到一些Webservice的类库(例如Apache的Axis) 缺点: 1. 复杂的应用中,URL可能非常长,而且不容易解析。 SOAP API 优点: 1. 定义严格。必须符合SOAP的格式 2. 某些时候使用比较方便 3. 开发工具支持比较多一点。 缺点: 1. 需要生成WSDL文件
全栈程序员站长
2022/09/14
2K0
Web API 和 API 的区别
API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,无需理解其内部工作机制细节,只需直接调用使用即可。
梨涡浅笑
2020/10/27
3.2K0
API和App
API和App是FreeSWITCH实现的两个基本的接口(INTERFACE)。API相当于命令行接口,它是独立存在的命令,App则是与一个Channel相关的,在Channel上执行的。
杜金房
2020/12/21
1K0
逻辑结构和物理结构
什么是逻辑结构 数据对象中数据元素之间的相互关系。 逻辑结构的种类 集合结构:元素之间没有特定的相连的关系,但每个元素只能有一个不能重复。 集合结构 树形结构:元素
longzeqiu
2020/02/18
6660
逻辑结构和物理结构
elasticsearch的restful API和Java API
本人现在使用的是elasticsearch 5.2.1的,服务器IP为192.168.5.182.所以在Java API和jar包中会有所不同.
算法之名
2019/08/20
2K0
[C语言] 数据结构-逻辑结构和物理结构
顺序存储结构:把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的
唯一Chat
2019/09/10
9850
[C语言] 数据结构-逻辑结构和物理结构
REST API和GraphQL API的比较
REST(表述性状态传输)API 是一种应用程序接口 (API) 的架构风格,它使用 HTTP 请求来访问和使用数据。该数据可用于GET、PUT、POST和DELETE数据类型,指的是对资源的读取、更新、创建和删除操作。 RESTful API 使用 HTTP 方法在处理数据时执行 CRUD(创建、读取、更新和删除)过程。 为了促进缓存、AB 测试、身份验证和其他过程,标头向客户端和服务器提供信息。 主体包含客户端想要传输到服务器的数据,例如请求的有效负载。
用户4235284
2023/10/14
5690
REST API和GraphQL API的比较
线性结构和非线性结构
1)特点是数据元素之间存在一对一的线性关系 2)线性结构有两种不同的存储结构,即顺序存储结构和链式存储结构。顺序存储的线性表称为顺序表,顺序表中的存储元素是连续的 3)链式存储的线性表称为链表,链表中的存储元素不一定是连续的,元素节点中存放数据元素以及相邻元素的地址信息 4)线性结构常见的有:数组、队列、链表和栈
桑鱼
2020/03/18
9230
浅析API和SDK
最近有小伙伴咨询胡哥关于API和SDK的概念以及区别,今天给大家来阐述下我的理解,手动微笑.gif。
胡哥有话说
2019/12/19
7510
REST API和SOAP API之间的区别
The Representational State Transfer (REST)架构风格不是可以购买的技术,也不是可以添加到软件开发项目中的库。REST是一种世界观,将信息提升为我们构建的体系结构的第一流元素。
程序你好
2018/08/09
2K0
REST API和SOAP API之间的区别
REST API和SOAP API之间的区别
The Representational State Transfer (REST)架构风格不是可以购买的技术,也不是可以添加到软件开发项目中的库。REST是一种世界观,将信息提升为我们构建的体系结构的第一流元素。
全栈程序员站长
2022/09/14
1.3K0
API Testing 11 – SOAP和REST API区别
SOAP – Simple Object Access Protocol REST – Representational State Transfer Protocol
全栈程序员站长
2022/09/15
5410
API Testing 11 – SOAP和REST API区别
树的逻辑结构和存储结构
解决多出来的指针域浪费空间的办法 有几个孩子就分配几个指针域,这样可以避免指针域占据空间
大忽悠爱学习
2021/03/15
7490

相似问题

API端点和结构

13

Android API和CPU体系结构

12

ruby win32api和结构(VerQueryValue)

20

API URL结构

28

无菌API结构

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文