URL不能包含控制字符

2024-06-16 10:33:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用Microsoft Academic API并使用Python从他们的站点运行代码,但我的代码不断抛出InvalidURL: URL can't contain control characters

这是在浏览器中工作的URL: https://api.labs.cognitive.microsoft.com/academic/v1.0/evaluate?expr= Composite(AA.AuN=='jaime teevan')&count=2&attributes=Ti,Y,CC,AA.AuN,AA.AuId&subscription-key=<subscription_key> (上面的调用是:https://docs.microsoft.com/en-us/academic-services/project-academic-knowledge/reference-evaluate-method上的一个示例)

我尝试使用下面的代码调用同一个示例,但它是有效的:

headers = {
    # Request headers
    'Ocp-Apim-Subscription-Key': '<KEY>',
}

params = urllib.parse.urlencode({
    # Request parameters
    'complete': '0',
    'count': '1'
})


    try:
    conn = http.client.HTTPSConnection('api.labs.cognitive.microsoft.com')
    conn.request("GET", "/academic/v1.0/evaluate?expr=Composite(AA.AuN==jaime teevan)&count=2&attributes=Ti,Y,CC,AA.AuN,AA.AuId", headers)
    response = conn.getresponse()
    data = response.read()
    print(data)
    conn.close()
except Exception as e:
    raise e
    

它抛出以下错误:

InvalidURL: URL can't contain control characters. '/academic/v1.0/evaluate?expr=Composite(AA.AuN==jaime teevan)&count=2&attributes=Ti,Y,CC,AA.AuN,AA.AuId' (found at least ' ')

有人能帮我弥补我所缺少的吗


Tags: 代码comurlcountconnattributesmicrosoftaa
2条回答

使用原始字符串(r“myurl”)如下所示,并在有效时发布:

conn.request("GET", r"/academic/v1.0/evaluate?expr=Composite(AA.AuN==jaime teevan)&count=2&attributes=Ti,Y,CC,AA.AuN,AA.AuId", headers)

在URL上传递单引号、空格和其他字符时可能会很麻烦。在稍微慢一点之后,如果您尝试使用“请求”来代替呢

import requests

headers = {
    # Request headers
    'Ocp-Apim-Subscription-Key': '<KEY>',
}

url = "https://api.labs.cognitive.microsoft.com/academic/v1.0/evaluate?expr=Composite(AA.AuN==jaime teevan)&count=2&attributes=Ti,Y,CC,AA.AuN,AA.AuId" 
response = requests.get(url=url, headers=headers)
print(response.content)

我刚刚测试了它,得到了一条401错误消息,这意味着请求通过了,但我缺乏授权

相关问题 更多 >