我遵循这个Laravel令牌API教程:http://rjv.im/post/95988160186/api-token-authentication-with-laravel-and-sentry-part。我写了以下cURL请求与我的API进行通信:Laravel API cURL请求Python
curl -H "X-Auth-Token:tokenhere" http://localhost:8000/account
请求正常工作,并准确返回预期数据。当我把这种对Python我收到urllib2.HTTPError: HTTP Error 401: Unauthorized
import urllib2
req = urllib2.Request('http://localhost:8000/account')
req.add_header("X-Auth-Token", "tokenhere")
resp = urllib2.urlopen(req)
content = resp.read()
print content
如果我通过使用基本身份验证,而不是X-验证令牌的用户凭据,要求按预期工作:
import urllib2
def basic_authorization(user, password):
s = user + ":" + password
return "Basic " + s.encode("base64").rstrip()
req = urllib2.Request("http://localhost:8000/account", headers = { "Authorization": basic_authorization("usernameHere", "passwordHere"), })
f = urllib2.urlopen(req)
print f.read()
任何援助将非常感激。
首先,您如何解析服务器端的X-Auth-Token标头?因为通常情况下,标题是在冒号后用一个空格发送的 - 这就是curl将发送所有其他头文件的方式,以及urllib2将如何发送所有头文件,包括您添加的头文件。如果你的服务器实际上期望''X-Auth-Token:tokenhere''并拒绝''X-Auth-Token:tokenhere'',那么你需要修正服务器端的错误。 – abarnert 2014-11-21 22:38:36
其次,为了调试这个,你需要先看看你发送的内容是不同的。你可以让你的服务器记录完整的请求,以便比较它们吗?或者在Wireshark中查看它们?或者只是运行'nc -kl 8000'而不是你的服务器,并且当你的'curl'命令和Python程序试图与它对话时,看它打印出来的内容? – abarnert 2014-11-21 22:39:41
最后,大多数auth-token机制都有TTL /到期/等等。 curl命令是否在Python脚本失败后正常工作,或者在过去是否正常工作? – abarnert 2014-11-21 22:42:06