簡體   English   中英

InvalidSchema:未找到“{'url':

[英]InvalidSchema: No connection adapters were found for "{'url':

我正在嘗試使用 pyspark 進行分頁並出現以下錯誤。 我的分頁鏈接在 header 中作為鍵 [Link] 和值 [rel="next"]。 錯誤顯示在此行 r1 = requests.get(response.links['next'])。問題是傳遞的“下一個”URL 中缺少 baseURL。

getURL = 'https://api.xxx.com/v3/direct-access/abc'
baseURL = 'https://api.xxx.com/v3/direct-access'
headers = {
"accept" : "application/json",
"Content-Type": "application/json",
"Authorization": "Bearer " + str(token)
 }
results = []

response = requests.get(getURL, headers=headers)
r = response.json()  

for i in r:  
results.append(i) 

while response.links['next']: ## != response.links['last']:  
r1 = requests.get(response.links['next'])  
r = r1.json()  
for i in r:  
    results.append(i)
 
Error: InvalidSchema: No connection adapters were found for "{'url': '/abc?  action=next&next_page=%28id%2Ccompletionid%29+%3C+%28840430000754002%2C840430413029241%29&pagesize=10000', 'rel': 'next'}"

如何將 baseURL 和 url 合並為一個鏈接並將其傳遞到 while 循環中? 像下面這樣的東西

https://api.xxx.com/v3/direct-access/abc?action=next&next_page=%28id%2Ccompletionid%29+%3C+%28840430000754002%2C840430413029241%29&pagesize=10000

像這樣:

while response.links['next']:
    next_link = response.links['next']['url']
    r1 = requests.get(baseURL + next_link, headers=headers)
    r = r1.json()
    for i in r:
        results.append(i)

您的代碼有幾個問題。

  1. response.links['next']是一個字典{'url': ...} requests.get(...)需要一個 URL 字符串。
# requests.get(response.links['next'])
requests.get(response.links['next']['url'])
# requests.get(baseURL + response.links['next']['url'])  # With baseURL
  1. response沒有被修改,導致死循環。
while response...
    # r1 = requests.get(response.links['next'])
    response = requests.get(baseURL + response.links['next']['url'])
  1. 對於最后一個鏈接, 'next'將不存在。
# while response.links['next']:
while response.links.get('next'):

最小的,可重現的例子:

import requests

getURL = 'https://api.github.com/users/acjh/repos'
baseURL = ''
headers = {}
results = []

response = requests.get(getURL, headers=headers)
r = response.json()

for i in r:
    results.append(i)

while response.links.get('next'):
    response = requests.get(baseURL + response.links['next']['url'])
    r = response.json()
    for i in r:
        results.append(i)

assert len(results) == requests.get(getURL[:-6]).json()['public_repos']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM