簡體   English   中英

Laravel API cURL對Python的請求

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM