发送登录标头python 2.7

时间:2019-02-28 10:40:35

标签: python json api iot

嗨,我需要将登录标头发送到sigfox。但是,当我在调用中插入auth变量时,它们始终被拒绝,否则代码将失败。

这是起作用但拒绝的代码。

print 'end of the dummy'
devices = requests.get("https://api.sigfox.com/v2/devices", auth=(API_USER, API_PWD)).json()
r = requests.get('https://api.sigfox.com/v2/devices', data=users, stream=True)
data = r.raw.read(r)

打印(数据)

这是失败的代码。

credentials = b64encode(b"somebase64string:somebase64string").decode("ascii")
headers = { 'Authorization' : 'Basic %s' %  credentials }


print 'end of the dummy'
devices = requests.get("https://api.sigfox.com/v2/devices", auth=(API_USER, API_PWD)).json() r = requests.get('https://api.sigfox.com/v2/devices', auth=credentials, data=users, stream=True) data = r.raw.read(r)


print(data) 

第二个代码不那么混乱,但是stackoverflow与idention一起使用。我想我需要在r变量中传递auth with,但是我不知道如何正确执行。我正在使用Python 2.7

2 个答案:

答案 0 :(得分:0)

您需要对用户名和密码进行编码。

encodedUname = urllib.quote_plus(userName)
encodedPwd = urllib.quote_plus(password)
http://{encodedUname}:{encodedPwd}@{url}

答案 1 :(得分:0)

您的问题是以下两个问题之一:

  1. 您需要执行POST请求而不是GET,因为我看到您应该在正文中发送数据,而不是在查询中作为参数。
  2. 您应该以正确的方式使用GET api:requests.get(url, params=None, **kwargs)

这是开发人员界面中的功能签名。所以你应该更换 r = requests.get('https://api.sigfox.com/v2/devices', data=users, stream=True)r = requests.get('https://api.sigfox.com/v2/devices', params=users, stream=True)

但我强烈认为这应该是POST请求,而不是GET。