簡體   English   中英

從urllib2遷移到請求python 2.7

[英]migrate from urllib2 to requests python 2.7

我正在嘗試使用一些有效的代碼,並將其從urlib2更改為請求。 原始代碼提供用戶名,密碼的基本登錄信息,並將KEY和SECRET張貼在urllib2請求的標頭中。 以下代碼是我嘗試更改為使用請求模塊並獲得一些進行附加API調用的功能的嘗試。 我嘗試了數十種組合,並且均返回了代碼400。顯然,我的請求代碼未成功提供所需的信息以返回200響應並提供所需的授權令牌。

## Import needed modules

import urllib2, urllib, base64
import httplib
import requests
import json

## initialize variables 

KEY = "7f1xxxx-3xxx-4xxx-9a7f-8be66839dede"
SECRET = "45xxxxxx-45xxx-469a-9ae9-a7927a76cfeb"
userName = "my-email@xxx.com"
passWord = "mypassword"
URL = "https://company.com/auth/token"
token = None
sessionid = None


DATA = urllib.urlencode({"grant_type":"password",
                         "username":userName,
                          "password":passWord})

base64string = base64.encodestring('%s:%s' % (KEY, SECRET)).replace('\n', '')
request = urllib2.Request(URL, DATA)
request.add_header("Authorization", "Basic %s" % base64string)
result = urllib2.urlopen(request)
token = result.read()
print token

這將返回我的授權令牌,一切正常。 我可以將令牌傳遞給授權服務器,並具有對與數據庫進行交互的api的完全訪問權限。 以下是嘗試使用請求並提供其提供的附加功能的嘗試。

client = requests.session()

payload = {"grant_type":"password",
           "username":userName,
           "password":passWord,
           "applicationId": KEY
           }

headers = {'content-type':'application/json',
           "grant_type":"password",
           "username":userName,
           "password":passWord,
           'applicationsId': KEY,
           'Authorization': base64string,
           'token': token,
           'sessionid': sessionid
           }

response = client.post(URL, params = payload, headers=headers)
token = response.content
print token 
 {"error":"invalid_request"}

print response
 <Response [400]>

如果要使用基本身份驗證,則應使用請求中方法

您的帖子應該看起來像

response = client.post(
       URL, 
       params = payload,
       headers=headers,
       auth=HTTPBasicAuth(
           KEY,
           SECRET
))

在帖子的某個地方,另一個問題的貢獻者提到某些項目實際上需要放在請求的正文中,而不是在標題中。 我嘗試了各種組合,以下解決了400響應並實現了我的目標。

 data = {"grant_type":"password",
           "username":userName,
           "password":passWord,
           "applicationId": KEY
           }

headers = {'Authorization': "Basic %s" % base64string,
           'token': token
            }


response = client.post(URL, data = data, headers=headers)
token = response.text
print token

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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