相关疑难解决方法(0)

Python urllib2,基本HTTP身份验证和tr.im.

我正在玩,尝试编写一些代码来使用tr.im API来缩短URL.

在阅读http://docs.python.org/library/urllib2.html后,我尝试了:

   TRIM_API_URL = 'http://api.tr.im/api'
   auth_handler = urllib2.HTTPBasicAuthHandler()
   auth_handler.add_password(realm='tr.im',
                             uri=TRIM_API_URL,
                             user=USERNAME,
                             passwd=PASSWORD)
   opener = urllib2.build_opener(auth_handler)
   urllib2.install_opener(opener)
   response = urllib2.urlopen('%s/trim_simple?url=%s'
                              % (TRIM_API_URL, url_to_trim))
   url = response.read().strip()
Run Code Online (Sandbox Code Playgroud)

response.code是200(我认为它应该是202).url有效,但基本的HTTP身份验证似乎没有用,因为缩短的URL不在我的URL列表中(在http://tr.im/?page=1).

在阅读http://www.voidspace.org.uk/python/articles/authentication.shtml#doing-it-properly后, 我也尝试过:

   TRIM_API_URL = 'api.tr.im/api'
   password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
   password_mgr.add_password(None, TRIM_API_URL, USERNAME, PASSWORD)
   auth_handler = urllib2.HTTPBasicAuthHandler(password_mgr)
   opener = urllib2.build_opener(auth_handler)
   urllib2.install_opener(opener)
   response = urllib2.urlopen('http://%s/trim_simple?url=%s'
                              % (TRIM_API_URL, url_to_trim))
   url = response.read().strip()
Run Code Online (Sandbox Code Playgroud)

但我得到了相同的结果.(response.code为200且url有效,但未在我的帐户http://tr.im/中记录.)

如果我使用查询字符串参数而不是基本HTTP身份验证,如下所示:

   TRIM_API_URL = 'http://api.tr.im/api'
   response = urllib2.urlopen('%s/trim_simple?url=%s&username=%s&password=%s'
                              % (TRIM_API_URL,
                                 url_to_trim,
                                 USERNAME,
                                 PASSWORD))
   url = response.read().strip()
Run Code Online (Sandbox Code Playgroud)

...然后不仅url有效,而且它记录在我的tr.im帐户中.(虽然response.code仍然是200.) …

python authentication http

83
推荐指数
4
解决办法
12万
查看次数

如何将用户名:密码发送到unittest的app.get()请求?

这是我在Flask-RESTful中进行单元测试的一部分.

self.app = application.app.test_client()
rv = self.app.get('api/v1.0/{0}'.format(ios_sync_timestamp))
eq_(rv.status_code,200)
Run Code Online (Sandbox Code Playgroud)

在命令行中,我可以使用curl将用户名:密码发送到服务:

curl -d username:password http://localhost:5000/api/v1.0/1234567
Run Code Online (Sandbox Code Playgroud)

如何在单元测试的get()中实现相同的功能?

由于我的get/put/post需要身份验证,否则测试将失败.

python unit-testing basic-authentication flask flask-restful

10
推荐指数
1
解决办法
6782
查看次数

基本身份验证返回 401 客户端错误,但在邮递员中有效

我已经浏览了许多与使用基本身份验证触发 GET 请求相关的类似帖子(例如:Python、带有基本身份验证的 HTTPS GET),但仍然无法找出问题。我不断收到错误requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url

使用相同的凭据,标头在邮递员中尝试了相同的操作,它按预期工作。已验证 api_key、password 的 base64encoded 值与 postman 中使用的值完全相同,因此我不认为其编码或资源访问权限问题。

python -V
Python 3.6.4 :: Anaconda, Inc.
Run Code Online (Sandbox Code Playgroud)

方法一

api_key = 'some_api_key'
password = 'some_password'
headers = {'accept': 'application/json'}

url = 'https://test.access.com/this/url'

api_key_password = "%s:%s" % (api_key, password)

b64_encoded = b64encode(bytes(api_key_password, 'utf-8')).decode("ascii")

headers['authorization'] = 'Basic %s' %  b64_encoded

response = requests.get(url,
                        headers=headers)

if (response.ok):
    json_data = json.loads(response.content)
    print (json_data)
else:
    print (response)
    response.raise_for_status()
Run Code Online (Sandbox Code Playgroud)

方法2

api_key = 'some_api_key'
password = 'some_password' …
Run Code Online (Sandbox Code Playgroud)

python basic-authentication python-requests

2
推荐指数
1
解决办法
5509
查看次数

HTTP错误401:从HTTPS网站下载文件并保存时需要授权

基本上我需要一个给出URL的程序,它会下载一个文件并保存它.我知道这应该很简单,但这里有一些缺点......

首先,它是我在工作中构建的工具的一部分,除此之外我还有其他所有内容,URL是HTTPS,URL是您要在浏览器中粘贴的URL,如果您需要,您会弹出一个提示打开或保存文件(.txt).

其次,我是初学者,所以如果有我不提供的信息,请问我.:)

我顺便使用Python 3.3.

我试过这个:

import urllib.request
response = urllib.request.urlopen('https://websitewithfile.com')
txt = response.read()
print(txt)
Run Code Online (Sandbox Code Playgroud)

我得到:

urllib.error.HTTPError: HTTP Error 401: Authorization Required
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?谢谢!!

python authentication https python-3.x

1
推荐指数
1
解决办法
1万
查看次数

为什么我总是收到“服务器已拒绝客户端凭据。” 当我调用业务中心API时?

这是我的 MSAL 身份验证:

@app.route('/get-microsoft-data', methods=('GET', 'POST'))
def get_microsoft_token():
    public_app = ConfidentialClientApplication(
        client_id="<client_id>", authority="https://login.microsoftonline.com/<tenant_id>",
        client_credential="<client_secret>"
    )
    
    result = None
    result = public_app.acquire_token_silent(["https://api.businesscentral.dynamics.com/.default"], account=None)

    if not result:
        print("No suitable token exists in cache. Let's get a new one from AAD.")
        result = public_app.acquire_token_for_client(scopes=["https://api.businesscentral.dynamics.com/.default"])
        
    if "access_token" in result:
        global microsoft_token
        microsoft_token = result["access_token"]

    return redirect('/') 
Run Code Online (Sandbox Code Playgroud)

这是我对业务中心 api 的调用:

@app.route('/send-data-to-microsoft', methods=('GET', 'POST'))
def send_data_to_microsoft():
    print(microsoft_token)
    
    headers = {
        "Authorization": "Bearer " + microsoft_token
    }
    
    r = requests.get("https://api.businesscentral.dynamics.com/v1.0/<tenant_domain>/sandbox/api/v1.0/companies", headers=headers)
    print(r.json())
    return redirect('/')
Run Code Online (Sandbox Code Playgroud)

这是我调用 /send-data-to-microsoft 时遇到的错误: …

python azure azure-ad-msal dynamics-business-central

1
推荐指数
1
解决办法
7495
查看次数