[英]Laravel API cURL Request to Python
我遵循了Laravel令牌API教程: http ://rjv.im/post/95988160186/api-token-authentication-with-laravel-and-sentry-part。 我已編寫以下cURL請求以與我的API通信:
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-Auth-Token傳遞用戶憑據,則請求將按預期工作:
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()
任何幫助將不勝感激。
您在本教程中錯過了一些東西。 在令牌表中有一列:
$table->string('client');
從哪個客戶端發送請求很重要。 我正在使用https://github.com/hisorange/browser-detect來檢測我從哪個客戶端收到了請求。
但是現在,我將僅嘗試查看用戶代理。 在我的laravel代碼中,我剛剛記錄了每個請求,以查看以下代碼的情況:
Route::filter('auth.token', function($route, $request)
{
....
Log::info($request);
....
}
現在,讓我們看看:
當我從命令行使用curl時:
curl -u user@example.com:password -X GET http://localhost:8000/account
我的用戶代理是
User-Agent: curl/7.32.0
我使用上面的代碼從python發送了同樣的內容,用戶代理為:
User-Agent: Python-urllib/2.7
啊! 一定是這樣。 您必須使用基本身份驗證至少對用戶進行一次身份驗證,這將為您提供一個令牌,並且該令牌僅對該客戶端有效。 在本教程的第一部分http://rjv.im/post/78940780589/api-token-authentication-with-laravel-and-sentry-part中 ,沒有這種情況。 在評論中,我收到某人發布了有關如何支持多個客戶端的查詢,因此創建了此示例來解決該問題。
除此之外,我是否可以建議該庫: https : //github.com/chrisbjr/api-guard它支持速率限制,易於與Sentry集成。 與我的教程有些不同。 使用我的解決方案,您可以使用基本身份驗證或令牌訪問任何端點。 使用上述庫,僅允許令牌,因此有專用的路徑來生成令牌。 讓我知道事情的后續。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.