callbackurl是什么 怎么获取传回来的数据

回调 | 七牛云存储
回调(callback)
开发者可以要求七牛云存储在某文件上传完成后向特定的URL发起一个回调请求。七牛云存储会将该回调的响应内容作为文件上传响应的一部分一并返回给客户端。回调的流程如下图所示:
要启用回调功能,业务服务器在签发上传凭证时需要设置中的callbackUrl字段,并且设置callbackBody字段。
通过设定上传策略中的callbackUrl字段为一个有效的地址,即可让七牛云存储在文件上传完成后向该地址发起回调请求。
该地址可以是一个HTTP或者HTTPS的URL,允许公网访问。
如果需要传递自定义的请求内容,开发者可以考虑配合使用上传策略中的callbackBody字段。如果只有callbackUrl而没有callbackBody,回调服务器收到的请求内容将为空。
同普通客户端直传和重定向上传一样,用户也可以控制回调中传递到客户回调服务器的反馈信息。callbackBody的格式如下:
&item&=(&magicvar&|&xvar&)[&&item&=(&magicvar&|&xvar&)...]
一个典型的callbackBody设置如下:
put_policy = '{
&callbackBody& : &name=$(fname)&hash=$(etag)&location=$(x:location)\
&price=$(x:price)&uid=123&
上面的 callbackBody 示例中,混合使用了魔法变量(name,hash)、自定义变量(location,price)及自定义常量(uid)。
假设应用客户端发出了如下的上传请求:
&form method=&post& action=&/& enctype=&multipart/form-data&&
&input name=&key& type=&hidden& value=&sunflower.jpg&&
&input name=&x:location& value=&Shanghai&&
&input name=&x:price& value=&1500.00&&
&input name=&token& type=&hidden& value=&...&&
&input name=&file& type=&file& /&
其中,客户端发送了自定义变量的值x:location = Shanghai和x:price = 1500.00,七牛云存储将根据上传资源的实际情况填写魔法变量$(fname)和$(etag)的值。
完成上传后,七牛云存储便会构造出如下的回调信息:
name=sunflower.jpg&hash=Fn6qeQi4VDLQ347NiRm- \
RlQx_4O2&location=Shanghai&price=1500.00&uid=123
七牛云存储将这组数据作为请求Body发送至用户指定的回调服务器,请求方式为POST。回调服务器将接收到以下格式的请求内容:
POST /callback
Content-Type: application/x-www-form-urlencoded
User-Agent: qiniu go-sdk v6.0.0
Authorization: QBox iN7NgwM31j4-BZacMjPrOQBs34UG1maYCAQmhdCV:tDK-3f5xF3SJYEAwsll5g=
name=sunflower.jpg&hash=Fn6qeQi4VDLQ347NiRm- \
RlQx_4O2&location=Shanghai&price=1500.00&uid=123
回调服务器接收到回调请求后,负责生成七牛返回给客户端的数据(json格式),该数据作为此次回调请求的响应内容。如果回调成功,回调服务应对七牛云存储作出类似如下的响应(注意:回调响应内容由回调服务生成,以下仅作为示例):
HTTP/1.1 200 OK
Server: nginx/1.1.19
Date: Thu, 19 Dec :30 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
{&success&:true,&name&:&sunflowerb.jpg&}
七牛云存储将上面的回调结果返回给客户端,客户端接收到以下回应:
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
Server: nginx/1.4.4
Date: Thu, 19 Dec :56 GMT
Pragma: no-cache
X-Log: BDT:4;BDT:2;LBD:13;rs.put:1048;rs-upload.putFile:2514;UP.CB:3088;UP:5603
X-Reqid: iDYAAPBicOGXLUET
{&success&:true,&name&:&sunflowerb.jpg&}
如果回调失败,七牛云存储会将返回给应用客户端以及详细的失败信息。
由于回调地址是公网可任意访问的,回调服务如何确认一次回调是合法的呢?
七牛云存储在回调时会对请求数据签名,并将结果包含在请求头Authorization字段中,示例如下:
Authorization:QBox iN7NgwM31j4-BZacMjPrOQBs34UG1maYCAQmhdCV:tDK-3f5xF3SJYEAwsll5g=
其中QBox为固定值,iN7Ngw...dCV为用户的Accesskey,tDK-3f...5g=为签名结果(encoded_data)
回调服务器可以通过以下方法验证其合法性:
获取AUTHORIZATION字段值中的签名结果部分encoded_data
根据Accesskey选取正确的SecretKey
获取明文:data = Request.URL.Path +&\n& +Request.Body
部分语言或框架无法直接获取请求body的原始数据,在自行拼接时应当注意,body中的数据是经过的
采用HMAC-SHA1签名算法,对明文data签名,秘钥为SecretKey,比较签名结果是否与Authorization中的encoded_data字段相同,如相同则表明这是一个合法的回调请求
以PHP语言为示例,验证代码如下:
*C('accessKey')取得 AccessKey
*C('secretKey')取得 SecretKey
*callback.php 为回调地址的Path部分
*file_get_contents('php://input')获取RequestBody,其值形如:
*name=sunflower.jpg&hash=Fn6qeQi4VDLQ347NiRm-RlQx_4O2\
*&location=Shanghai&price=1500.00&uid=123
function IsQiniuCallback(){
$authstr = $_SERVER['HTTP_AUTHORIZATION'];
if(strpos($authstr,&QBox &)!=0){
$auth = explode(&:&,substr($authstr,5));
if(sizeof($auth)!=2||$auth[0]!=C('accessKey')){
$data = &/callback.php\n&.file_get_contents('php://input');
return URLSafeBase64Encode(hash_hmac('sha1',$data,C(&secretKey&), true)) == $auth[1];
注意:如果回调数据包含用户的敏感数据,建议回调地址使用HTTPS协议
为您找到了如下结果,感谢您对七牛的支持。
技术/购买咨询
400-808-9176
开发者支持后台怎么接收处理从url 客户端传来的json数据格式
后台怎么接收处理从url 客户端传来的json数据格式
[摘要:比来做项目用到了 一个新的客户端传参的体式格局,首要采纳的是客户端以json数据式的体式格局念背景传送数据,以是,背景吸收的参数也是json式的,刚最先没有晓得怎样做, 到末了才找到懂得决的]
最近做项目用到了 一个新的客户端传参的方式,主要采用的是客户端以json数据格式的方式想后台传递数据,所以,后台接收的参数也是json格式的,刚开始不知道怎么做,
到最后才找到了解决的办法就是利用google提供的gson.jar就能很好的解决。
其实就是把前端的json数据格式转换成对象#
gson.jar下载地址 &/Code/Jar/g/Downloadgson224jar.htm&最新版本 2.24
开始看了google提供的API我就能知道其实,后台解析前端传来的json数据格式听简单的#
比如客户端传来的参数格式url&
url:& &http://10.16.16.104:8081/ilifeGroupinfo_getGroupinfoPager.action?data={&c&:&groupInfo&,&m&:&list&,&p&:{&pageNum&:1,&type&:0,&sessionKey&:1}}&&&
从最外边可以知道我们传给的最外面的参数是data所以后台接收到的也只是data的参数&
所以我们现在需要做的就是解析传给后台的json数据格式
// 谷歌产生json对象的工具
Gson json = new Gson();
// 产生 P{} 里面参数接收对象
Param p = new Param();&Param对象里的属性是pageNum,type,sessionKey(注意的是该对象指的是p,对象里面的属性也必须和客户端中json数据格式中的字段名称一致)
//需要将客户端传来的json数据转换成什么对象
p = json.fromJson(data, Param.class);&data为最外层的json数据对象
获取对象中的参数的值&
p.getType();就能获取到客户端传来的参数的值了###
很简单的 API一看就明白了###
最外层当然为
gson.jar包 &
public class Base {
public String getM() {
public void setM(String m) {
public String getC() {
public void setC(String c) {
对象中的对象
package com.ismartinfo.ilife.api.entities.
public class Param extends Base{
private ParamV&
public ParamValue getP() {
public void setP(ParamValue p) {
package com.ismartinfo.ilife.api.entities.
public class ParamValue {&
private int pageN
private int groupInfoId;
private int groupInfoReplyId;
private String sessionK&
private int groupT
private String groupC
private int buttonT
private int replayId;
public int getPageNum() {
return pageN
public void setPageNum(int pageNum) {
this.pageNum = pageN
public String getSessionKey() {
return sessionK
public void setSessionKey(String sessionKey) {
this.sessionKey = sessionK
public int getType() {
public void setType(int type) {
this.type =
public int getGroupInfoId() {
return groupInfoId;
public void setGroupInfoId(int groupInfoId) {
this.groupInfoId = groupInfoId;
public int getGroupInfoReplyId() {
return groupInfoReplyId;
public void setGroupInfoReplyId(int groupInfoReplyId) {
this.groupInfoReplyId = groupInfoReplyId;
public int getGroupTitle() {
return groupT
public void setGroupTitle(int groupTitle) {
this.groupTitle = groupT
public String getGroupContent() {
return groupC
public void setGroupContent(String groupContent) {
this.groupContent = groupC
public String getPhone() {
public void setPhone(String phone) {
this.phone =
public int getButtonType() {
return buttonT
public void setButtonType(int buttonType) {
this.buttonType = buttonT
public int getReplayId() {
return replayId;
public void setReplayId(int replayId) {
this.replayId = replayId;
public int getDisclosure() {
public void setDisclosure(int disclosure) {
this.disclosure =
感谢关注 Ithao123JS频道,是专门为互联网人打造的学习交流平台,全面满足互联网人工作与学习需求,更多互联网资讯尽在 IThao123!
Laravel是一套简洁、优雅的PHP Web开发框架(PHP Web Framework)。它可以让你从面条一样杂乱的代码中解脱出来;它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力。
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。
用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。
Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。
Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。
产品设计是互联网产品经理的核心能力,一个好的产品经理一定在产品设计方面有扎实的功底,本专题将从互联网产品设计的几个方面谈谈产品设计
Swift是Apple在WWDC2014所发布的一门编程语言,用来撰写OS X和iOS应用程序[1]。在设计Swift时.就有意和Objective-C共存,Objective-C是Apple操作系统在导入Swift前使用的编程语言
Swift是供iOS和OS X应用编程的新编程语言,基于C和Objective-C,而却没有C的一些兼容约束。Swift采用了安全的编程模式和添加现代的功能来使得编程更加简单、灵活和有趣。界面则基于广受人民群众爱戴的Cocoa和Cocoa Touch框架,展示了软件开发的新方向。
IThao123周刊finalHttp.post(url, entity, contentType, callBack);第二个和第三个参数怎么填写,我提交的数据是JSONArray。 - 开源中国社区
当前访客身份:游客 [
当前位置:
finalHttp.post(url, entity, contentType, callBack);第二个和第三个参数怎么填写,我提交的实体是JSONArray。
共有0个答案
更多开发者职位上
有什么技术问题吗?
Robinso...的其它问题
类似的话题Main URL和Callback URL怎么填写?_windows7吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:429,837贴子:
Main URL和Callback URL怎么填写?收藏
GitHub的Register a new OAuth application 页面
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或

我要回帖

更多关于 不合法的callbackurl 的文章

 

随机推荐