请求获取方法如何使用

安德烈·F。

我使用请求将一些数据发送到服务器。该网址应类似于“ http:// IP:PORT / api / json / v1 / transfer / transferItem?organisation = Organisation&branch = 1&itemnumber = 1&operation = U&dyn = VARIABLE1 = blabla; VARIABLE2 = blabla

我使用以下代码:

def send(self):
    for i in range(1, 8):
        try:
            self.statusBar().showMessage('Connection...')
            resp = requests.get(url,
                params={'organisation': 'Organisation', 'branch': '1', 'itemnumber': str(i), 'operation': 'U', 'dyn': {'VARIABLE1': 'blabla', 'VARIABLE2': 'blabla'} })
            print(resp.url)
            if resp.status_code == requests.codes.ok:
                self.statusBar().showMessage('Finished '+str(i) +' / 7')
                time.sleep(0.5)
        except requests.exceptions.ConnectionError:
            self.statusBar().showMessage('Connection Error')
            break

但是print(resp.url)总是在... dyn = VARIABLE1之后结束。

ene烯

params不适合GET按原样请求,因为它们包含嵌套项目(dyn)。

在这种特定情况下,您应该做的是以服务器可以接受的格式分别编码此嵌套项。这将给像:

def send(self):
    for i in range(1, 8):
        try:
            self.statusBar().showMessage('Connection...')

            params = {
                'organisation': 'Organisation',
                'branch': '1',
                'itemnumber': str(i),
                'operation': 'U',
                'dyn': {'VARIABLE1': 'blabla', 'VARIABLE2': 'blabla'}
            }
            # Replace the 'dyn' param with a "key1=value1;key2=value2" representation
            params['dyn'] = ";".join("=".join(j) for j in params['dyn'].items())

            # EDIT: Got to encode the parameters ourselves or requests will urlencode them
            params = "&".join("=".join(k) for k in params.items())

            resp = requests.get(url, params)
            print(resp.url)
            if resp.status_code == requests.codes.ok:
                self.statusBar().showMessage('Finished %d / 7' % i)
                time.sleep(0.5)
        except requests.exceptions.ConnectionError:
            self.statusBar().showMessage('Connection Error')
            break

显然,我无法对其进行测试,但这应该是可以的。告诉我您是否有问题。

但是,我想强调一点,这在服务器端并不是一个很好的设计。POST更适合于任意嵌套的数据。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章