请求获取方法如何使用
requests get method how to use
我使用请求将一些数据发送到服务器。 URL 需要看起来像“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 之后结束。
您的 params
不适合 GET
请求 as-is,因为它们包含嵌套项 (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
更适合任意嵌套数据。
我使用请求将一些数据发送到服务器。 URL 需要看起来像“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 之后结束。
您的 params
不适合 GET
请求 as-is,因为它们包含嵌套项 (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
更适合任意嵌套数据。