2016-12-07 55 views
-1

我想寫一個python腳本來發送一個HTTP請求,所以我從urllib2庫(https://docs.python.org/2/howto/urllib2.html#id6)上的Python文檔讀取,並拿着身份驗證示例代碼,但我仍然得到錯誤...使用python發送一個HTTP請求 - 錯誤

這裏是我的代碼(* top_level_url =登錄URL,a_url = API請求,其在網絡上的作品,並顯示響應):

import urllib2 

password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm() 

# Add the username and password. 
# If we knew the realm, we could use it instead of None. 
user='MY_USER_NAME' 
passwd='MY_PASSWORD' 
top_level_url = "https://next.adjust.com/#/login" 
password_mgr.add_password(None, top_level_url, user, passwd) 

handler = urllib2.HTTPBasicAuthHandler(password_mgr) 

# create "opener" (OpenerDirector instance) 
opener = urllib2.build_opener(handler) 

# use the opener to fetch a URL 
a_url = 'https://api.adjust.com/kpis/v1/vzpmna78ud8m/cohorts?start_date=2016-12-05&end_date=2016-12-06&kpis=sessions&grouping=os_names,countries' 
opener.open(a_url) 

# Install the opener. 
# Now all calls to urllib2.urlopen use our opener. 
urllib2.install_opener(opener) 

但是當我運行的代碼,我收到一個錯誤:

Traceback (most recent call last): 
    File "httptest3.py", line 19, in <module> 
    opener.open(a_url) 
    File "/usr/lib64/python2.7/urllib2.py", line 437, in open 
    response = meth(req, response) 
    File "/usr/lib64/python2.7/urllib2.py", line 550, in http_response 
    'http', request, response, code, msg, hdrs) 
    File "/usr/lib64/python2.7/urllib2.py", line 475, in error 
    return self._call_chain(*args) 
    File "/usr/lib64/python2.7/urllib2.py", line 409, in _call_chain 
    result = func(*args) 
    File "/usr/lib64/python2.7/urllib2.py", line 558, in http_error_default 
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) 
urllib2.HTTPError: HTTP Error 401: Unauthorized 

我已經嘗試了多種解決方案來解決這個錯誤,但我一直在獲得相同的... 沒有人知道我的代碼中有什麼問題嗎? 還是你有另一個代碼示例可以工作? (正如我所說的,我試過谷歌前10名的結果...)

感謝先進!

+0

401錯誤說你是'未經授權的'這意味着(一般來說)你的驗證不起作用。檢查您的憑證,特別是檢查您的https://api.adjust.com/使用的身份驗證方法,這與Internet上的所有API都不相同。 – Saksow

+0

您在urllib2中使用的HTTP基本身份驗證不適用於跨域,並且您已將top_level_url設置爲https://next.adjust.com/#/login,然後您在另一個域上調用url。請參閱:http://stackoverflow.com/q/339244/121199 – filippo

+0

@Saksow 我在腳本中寫的用戶名和密碼 - 是我用來連接網站的確切細節... – Bramat

回答

1

它看起來像你adjust.com使用另一種他們的api認證比你正在使用。

ü應該閱讀本文檔: https://docs.adjust.com/en/kpi-service/#authentication

而不是使用一個用戶名和密碼,你應該增加這個HTTP頭到您請求:

Authorization: Token token=your_user_token

也可以添加&user_token=your_user_token到您的API調用。

+0

非常感謝 - 這是我第一次使用HTTP請求,你一直很有幫助:) – Bramat