Python urllib.request使用OpenElevation API显示RemoteDisconnected错误

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

/* greater than 767 px */
document.addEventListener("DOMContentLoaded",function (event) {
    if (window.innerWidth > 767) {
        document.querySelectorAll('.focustop .featured-block .featured-block__item-multi')[0].classList.add('featured-block__item-multi-active');
        const pics = document.querySelectorAll('.focustop .featured-block .featured-block__item-multi');
        const lastPic = pics.length - 1;
        const transitionDuration = 500; // matches CSS
        let transitionDelay =4000;
        const totalDelay = transitionDuration + transitionDelay;
        const intervalDelay = (transitionDuration * 2) + transitionDelay; // time to fade out + time to fade in + time to stay featured-block__item-active

        function toggleclass() {
            const activePic = document.querySelectorAll('.focustop .featured-block .featured-block__item-multi-active')[0];
            const activeIndex = Array.prototype.indexOf.call(pics,activePic);
            const nextIndex = activeIndex === lastPic ? 0 : activeIndex + 1;
            const nextPic = pics[nextIndex];

            setTimeout(() => activePic.classList.remove('featured-block__item-multi-active'),transitionDelay);    // Line A
            setTimeout(() => nextPic.classList.add('featured-block__item-multi-active'),totalDelay);
        }

        setInterval(toggleclass,intervalDelay);
    }
});

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

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)

以便将高程数据作为JSON对象获取。但就我而言,它返回一个错误,提示:

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

什么也没有发生。我该如何解决?

gdeexx1999 回答:Python urllib.request使用OpenElevation API显示RemoteDisconnected错误

除了创建循环外,别无其他方法(尝试直到响应正常为止)。由于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
本文链接:https://www.f2er.com/3141777.html

大家都在问