Python Запрос открытия urllib2 завершается неудачно с urllib2.HTTPError: Ошибка HTTP 401: неавторизован - PullRequest
0 голосов
/ 16 апреля 2020

Ниже приведен мой код python, использующий библиотеку urllib2, и он продолжает сбой из-за неавторизованной ошибки, хотя я использую правильный ключ API. Если я использую curl, POST / GET работает просто отлично. У кого-нибудь есть идеи? Спасибо.

Добавление нижеприведенных команд curl, которые прекрасно работают

Create Credential 
curl -X POST 'https://myurl.com' \
     -H 'Content-Type: application/json' \
     -u 'XXXXXXXXXX:' \
     -d @- << EOF
{ 
  "vendorAccountId": "1234567",
  "type": "my_role"
}
EOF

Ниже приведен код python, который не работает. По сути, строка кода, в которой происходит сбой, выглядит так: response = opener.open (request)

import boto3
import json
import logging
import signal
import requests
from urllib2 import build_opener, HTTPHandler, Request
import urllib2


LOGGER = logging.getLogger()
LOGGER.setLevel(logging.INFO)


def main():
        auth_token = "XXXXXXXXXX"
        account_id = "1234567"
        request_type = "CreateCredentials"
        content_type = ""
        request_body = json.dumps({})

         if request_type == "CreateCredentials":
            target_url = 'https://myurl.com'
            request_method = "POST"
            content_type = "application/json"
            request_body = json.dumps({
                "vendorAccountId": account_id,
                "type": "my_role"
            })

        handler = urllib2.HTTPHandler()
        opener = urllib2.build_opener(handler)

        request = urllib2.Request(target_url, data=request_body)
        request.add_header("Content-Type", content_type)
        request.add_header("Content-Length", len(request_body))
        request.add_header("Authorization", auth_token)
        request.get_method = lambda: request_method
        response = opener.open(request) #*****Fails here******


if __name__ == "__main__":
    main()

1 Ответ

0 голосов
/ 17 апреля 2020

Наконец, я понял, в чем проблема. Мое отсутствие терпения за то, что я не читаю руководства производителя. В HTTP-запросе, который я отправлял, отсутствовали некоторые обязательные параметры, и мне нужно было отправить ключ также в зашифрованном формате.

...