好吧,我需要一些帮助来解决我认为是一个简单的问题,但是在挖掘了一段时间之后,我会把它留给你们聪明的人来告诉我为什么我不是!
我正在尝试访问提供程序 api,我尝试访问的 URL 是:::.../proposals/AnotherTestProposal/city_furniture/items?filter=description$CONT"Ag"
这是他们希望传递的方式,它应该返回所有描述中包含字符串“Ag”的项目。我知道我目前有两个。
我正在使用 Django 1.9.4 和 requests_oauthlib 创建 OAuth1Session,我也成功地做到了这一点,因为我可以在没有 URL 参数的情况下访问资源。问题是我无法让"?filter=description..."
部件正确编码,它给了我一个 401。
当我将 .contents 呈现为 HTML 时,我得到:
{"status": 404, "message": "", "data": [], "arguments": {"id": "items?filter=description$CONT\"Ag\"", "collection": "city_furniture"}}
这告诉我“AG”部分正在被转义,这是我不想要的。如:我不想要“Ag”,我想要“Ag”。
所以,我的问题是:我怎样才能通过参数传递 URL,所以它们不包含斜杠,因为它们导致 URL 无效,从而使我无法正确访问数据?
其他可能不相关的信息:
我现在传递给 OAuth1Session 对象的 URL 字符串的参数部分是:
'/city_furniture/items%3Ffilter%3Ddescription%24CONT%22Ag%22'
从 API 网站过滤的示例:
proposals/master/roads/items?filter=description$CONT"highway"
我尝试将“编码”arg 传递给 .get(以更改 to_native_string 使用的编码)但请求拒绝它说它是无效的 arg
根据评论,一些额外的代码。使用函数名称get_protected_code()
获取正确传递的 OAuth 信息,然后在views.py
:
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