首页 > 解决方案 > 使用python请求上传到nexus3

问题描述

我有一个 python 脚本,我正在尝试使用 python requests 库将资产上传到 nexus 3。我在下面显示的代码适用于nexus 2。但是随着nexus 3 的其余api 发生更改,我发现很难将资产上传到nexus 3。

我修改了我的有效负载以包含存储库以及asset1 文件,但它不起作用。我还尝试包含标头并将有效负载转换为 json 格式,但没有运气。

任何线索将不胜感激。

import requests

filename = 'content.zip'
url = "https://nexus3-url/repos/service/rest/v1/components?repository=maven-repo"

files = { 'filename': open(filename, 'rb') }
payload = {
                'groupId' : 'group.id',
                'asset1.extension' : 'zip',
                'version' : '1.0.0',
                'artifactId' : 'test',
                'generate-pom' : 'false'
        }


response = requests.post(url,
                        allow_redirects = False,
                        auth = requests.auth.HTTPBasicAuth(username, password),
                        files = files,
                        data = payload,
                        timeout = 20,
                        verify = cert,
                )

我收到的错误消息是 requests.exceptions.HTTPError: 422 Client Error: Unprocessable Entity for url:

标签: python-2.7nexus3

解决方案


找到了解决方案。由于 nexus 3 的 GAV 参数不同,因此应该采用这种方式。

import requests

filename = 'content.zip'
payload = {
        'maven2.groupId': (None, 'group.id'),
        'maven2.artifactId': (None, 'test'),
        'maven2.version': (None, '1.0.0'),
        'maven2.generate-pom': (None, 'false'),
        'maven2.packaging': (None, 'zip'),
        'maven2.asset1': (filename, open(filename, 'rb')),
        'maven2.asset1.extension': (None, 'zip'),
}
params = (
        ('repository', 'maven-repo'),
)
url = "https://nexus3-url/repos/service/rest/v1/components

response = requests.post(url,
         allow_redirects = False,
         auth = requests.auth.HTTPBasicAuth(username, password),
         params = params,
         files = payload,
         timeout = 20,
         verify = cert,
)


推荐阅读