我正在尝试使用重力形式rest api,https://www.gravityhelp.com/documentation/article/web-api/,但无论我尝试什么,我都会收到401错误。我尝试过使用文档和Steven Henty的文章https://www.stevenhenty.com/gravity-forms-api/中列出的所有方法,但它似乎不起作用。
如果我以管理员身份登录wordpress网站,我将无法使用以下链接:
http://mydomain/gravityformsapi/forms/
感谢您的任何建议。
答案 0 :(得分:5)
对于我的情况,我没有点击更新按钮" Web API"标签
确保点击更新按钮,虽然它确实显示了API密钥,但您仍然需要点击更新按钮才能启用API。
答案 1 :(得分:2)
由于路线端点有些奇怪,我得到了同样的东西。在计算签名时,您不在路线上使用尾部斜杠:forms/1
。
但你做在URL中使用了一个尾部斜杠(否则我得到了301 Moved Permanently
):
http://demo.gravityforms.com/gravityformsapi/the_route/?api_key...
/?api_key...
看起来很奇怪,但这对我有用。
Here's the ruby example我正在使用demo credentials:
GravityFormsAPI.generate_URL(site: 'demo.gravityforms.com', route: 'forms/1', public_api_key: '5b225f8382', private_api_key: 'fc6d1bc71d2ebfc')
希望这有帮助。
答案 2 :(得分:1)
有些人在经过大量研究后发现了这篇文章
,我收到了间歇性的401错误Azure DocumentDB Intermittent 401 error when querying REST API via Obj-c
如果签名包含+符号,我收到401错误
也许可以帮助其他人
对不起我的英文写作
答案 3 :(得分:0)
基于solution here我发布此答案。
想象一下,您创建了网址,但它没有工作,您获得了401.然后经过一段时间后,您意识到Opps的错误!我传递的参数需要一个括号,你再次运行代码,你再次获得401。
那是为什么?
这是因为apiKey,Signature和Expire时间参数相同,您只使用GET请求更改了其他参数。但是,这三个参数用于对用户进行身份验证,这意味着生成的拒绝权限的旧签名将无论如何都会再次拒绝。
所以要解决这个问题,我只是将过期时间从1577922200
更改为1577933200
。我可以将它改为任何东西,但事情是我只需要提供一些新东西,以便生成新的签名。所以,当我改变它开始工作。
其他可能的原因
使用SHA1
进行签名时,根据文档使用NSString *string_to_sign = [NSString stringWithFormat:@"%@:%@:%@:%@",api_key,http_method,route,expires];
。但是为了使CCHmac
你必须传递两件事:
并基于link创建为
const char *cKey = [api_private_key cStringUsingEncoding:NSASCIIStringEncoding];
const char *cData = [string_to_sign cStringUsingEncoding:NSASCIIStringEncoding];
所以我误以为我在API Key
而不是cKey
使用API Private Key
。所以我按照教程说的改变了它并且它起作用了。否则我得到401
无论我尝试什么。