好吧,我需要一些帮助,我认为这是一个简单的问题,但经过一段时间的挖掘,我会留给你们聪明的人来告诉我为什么我不是!
我试图访问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时,我得到:
{"status": 404, "message": "", "data": [], "arguments": {"id": "items?filter=description$CONT\"Ag\"", "collection": "city_furniture"}}它告诉我"AG“部分被逃脱了,我不想这样。我不想要"Ag“,我想要”Ag“。
那么,我的问题是:如何使用params传递URL,使它们不包含斜杠,因为它们导致URL无效,从而阻止我正确访问数据?
其他,可能不相关的信息:
'/city_furniture/items%3Ffilter%3Ddescription%24CONT%22Ag%22'proposals/master/roads/items?filter=description$CONT"highway"每个注释,一些额外的代码。使用函数名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发布于 2016-06-16 11:44:17
看起来,通过将参数附加到URL编码的末尾( requests认为这是有意的),传递参数是不正确的,而且API端点正在以一种非预期的方式进行转换。
在requests中,您应该向requests.get提供一个params关键字参数:包含应该编码并作为请求的查询字符串发送的键值对的dict。例如,要对GitHub API运行查询,我们可以传递一个API令牌作为查询参数:
requests.get('http://api.github.com/user',
params={ 'access_token' : MY_OAUTH_TOKEN })结果请求将包含一个查询字符串,其中access_token参数设置为存储在MY_OAUTH_TOKEN中的值,并根据需要正确转义。(这些令牌通常包含=字符,例如,查询字符串值中的无效字符。)
https://stackoverflow.com/questions/37791722
复制相似问题