Python urllib.request 显示 OpenElevation 出现 RemoteDisconnected 错误 API

Python urllib.request shows RemoteDisconnected error with OpenElevation API

我有一个应用程序(用 PyQt5 编写)returns 位置的 x、y 和高程。当用户填写 x、y 并点击 getz 按钮时,应用会调用以下函数:

def getz(self, i):
    """calculates the elevation"""
    import urllib
    url = "https://api.open-elevation.com/api/v1/lookup"
    x = self.lineEditX.text()
    y = self.lineEditY.text()
    url = url + "\?locations\={},{}".format(x, y)
    print(url)
    if i is "pushButtonSiteZ":
        response = urllib.request.Request(url)
        fp= urllib.request.urlopen(response)
        print('response is '+ response)
        self.lineEditSiteZ.setText(fp)

根据 Open Elevation 指南,它说您必须以​​以下形式提出请求:

curl https://api.open-elevation.com/api/v1/lookup\?locations\=50.3354,10.4567

为了获取高程数据作为 JSON 对象。但就我而言,它 returns 一条错误消息:

raise RemoteDisconnected("Remote end closed connection without"

RemoteDisconnected: Remote end closed connection without response

什么也没发生。我该如何解决这个问题?

没有别的办法只能创建一个循环(尝试直到响应正常)。因为Open Elevation API 处理这么多回复还是有问题的。但是下面的一段代码在可能很长的延迟之后才起作用:

def getz(self, i):
    import json
    import requests
    url = "https://api.open-elevation.com/api/v1/lookup"
    """calculates the elevation"""
    if i is 'pushButtonSiteZ':
        x = self.lineEditSiteX.text()
        y = self.lineEditSiteY.text()
        param = url + '?locations={},{}'.format(x,y)
        print(param)
        while True:
            try:
                response = requests.get(param)
                print(response.status_code)
                if str(response.status_code) == '200':
                    r = response.text
                    r = json.loads(r)
                    out = r['results'][0]['elevation']
                    print(out)
                    self.lineEditSiteZ.setText(str(out))
                    cal_rng(self)
                    break
            except ConnectionError:
                continue
            except json.decoder.JSONDecodeError:
                continue
            except KeyboardInterrupt:
                continue
            except requests.exceptions.SSLError:
                continue
            except requests.exceptions.ConnectionError:
                continue