【发布时间】:2014-09-26 20:47:00
【问题描述】:
我希望我能解释一下自己。不用自欺欺人。
我正在尝试使用 python 3.4 将 url 发送到 sparkcore api。
我已经设法从 windows 命令行直接使用 curl:-
curl https://api.spark.io/v1/devices/xxxxxxxxxxxxxxx/led -d access_token=yyyyyyyyyyyyyyyy -d params=l1,HIGH
一切正常。 led 和 -d 之间有一个空格,但这不是问题。
我读过reting 在python 中使用libcurl 执行此操作非常痛苦,我看到很多关于使用请求的消息,所以我想试试看。
于是我写了一个小程序:
import requests
r = requests.get('https://api.spark.io/v1/devices/xxxxxxxxxxxxxxxxxx/led -d access_token=yyyyyyyyyyyyyyyyy -d params=l1,HIGH')
print(r.url)
print(r)
我得到回报:
<Response [400]>
当我检查实际发出的 URL 时,URL 中的空格被替换为 %20。这似乎是我的实际问题,因为请求添加的 %20 混淆了失败的服务器
“代码”:400, “错误”:“无效请求”, "error_description": "未找到访问令牌"
我已经尝试阅读如何在不通过编码添加 %20 的情况下使用空格,但我确实可以使用指向正确方向的指针。
谢谢
利亚姆
【问题讨论】:
-
你能改写这个问题吗?我不认为你的解释很清楚。
-
%20 是空格字符的 REST 解释,当您在 url 栏中放置一组搜索词时,谷歌就是这样读取它的。网址中没有空格。为什么是你的?
-
我从来没有实际添加 %20,我确实在我的 url 中使用了空格,并且在 windows 命令行中使用 curl 可以正常工作,如果我将相同的 url 复制并粘贴到请求命令 python脚本失败,当我使用 print(r.url) 时,空格被替换为 %20,作为响应,我从 Requests 中返回。
-
url 以 led 结尾,从 -d 开始是发送给 curl 的选项。 Requests 期望第一个参数只是 url。
-
其实就是 POST xxxxxx 到 url。 Requests 非常易于使用,对于 post,您只需将包含您的数据的字典传递给它。