首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >URL的OAuth1Session编码

URL的OAuth1Session编码
EN

Stack Overflow用户
提问于 2016-06-13 14:01:11
回答 1查看 255关注 0票数 0

好吧,我需要一些帮助,我认为这是一个简单的问题,但经过一段时间的挖掘,我会留给你们聪明的人来告诉我为什么我不是!

我试图访问provider,我试图访问的URL是:.../proposals/AnotherTestProposal/city_furniture/items?filter=description$CONT"Ag" ::这是他们希望它传递的方式,它应该返回所有描述包含字符串"Ag“的条目。我知道我现在有两个。

我正在使用Django 1.9.4和requests_oauthlib创建一个OAuth1Session,我也成功地这样做了,因为我可以不使用OAuth1Session参数访问资源。问题是,我无法让"?filter=description..."部件正确编码,而且它给了我一个401。

当我将.contents呈现给HTML时,我得到:

代码语言:javascript
运行
复制
{"status": 404, "message": "", "data": [], "arguments": {"id": "items?filter=description$CONT\"Ag\"", "collection": "city_furniture"}}

它告诉我"AG“部分被逃脱了,我不想这样。我不想要"Ag“,我想要”Ag“。

那么,我的问题是:如何使用params传递URL,使它们不包含斜杠,因为它们导致URL无效,从而阻止我正确访问数据?

其他,可能不相关的信息:

  1. 我现在传递给OAuth1Session对象的URL字符串的部分参数是:'/city_furniture/items%3Ffilter%3Ddescription%24CONT%22Ag%22'
  2. 从API网站过滤的示例:proposals/master/roads/items?filter=description$CONT"highway"
  3. 我尝试将“编码”arg传递给.get (以更改to_native_string使用的编码),但请求拒绝了它,称它是无效的arg。

每个注释,一些额外的代码。使用函数名get_protected_code()正确传递OAuth信息,然后在views.py中传递

代码语言:javascript
运行
复制
api_filter_url =  settings.IW_API_MODEL_COLLECTION + '/' + model_id + '/' + settings.IW_API_PROPOSAL_COLLECTION + '/' + proposal_name + '/city_furniture/items%3Ffilter%3Ddescription%24CONT%22Ag%22'
    json_model_info_pull = get_protected_data(api_filter_url)
    find_vendor = json_model_info_pull.content

def get_protected_data(url_str):
    ## ...stuffs to create OAuth1Session...
    adsk_pull = OAuth1Session(key,
                              client_secret=secret,
                              resource_owner_key=oauth_token_use,
                              resource_owner_secret=oauth_token_secret_use,
                              )
    headers = {'accept': 'application/vnd.autodesk.infraworks-v1+json'}
    api_url = settings.ADSK_IW_INFO_BASE_URL + url_str
    json_model_info_pull = adsk_pull.get(api_url, headers=headers)
    return json_model_info_pull
EN

回答 1

Stack Overflow用户

发布于 2016-06-16 11:44:17

看起来,通过将参数附加到URL编码的末尾( requests认为这是有意的),传递参数是不正确的,而且API端点正在以一种非预期的方式进行转换。

requests中,您应该向requests.get提供一个params关键字参数:包含应该编码并作为请求的查询字符串发送的键值对的dict。例如,要对GitHub API运行查询,我们可以传递一个API令牌作为查询参数:

代码语言:javascript
运行
复制
requests.get('http://api.github.com/user',
    params={ 'access_token' : MY_OAUTH_TOKEN })

结果请求将包含一个查询字符串,其中access_token参数设置为存储在MY_OAUTH_TOKEN中的值,并根据需要正确转义。(这些令牌通常包含=字符,例如,查询字符串值中的无效字符。)

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

https://stackoverflow.com/questions/37791722

复制
相关文章

相似问题

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