CKAN API 使用 urllib2 通过 python 调用给出 HTTP 错误 409:冲突

CKAN API calls via python using urllib2 gives HTTP Error 409: Conflict

您好,我一直在尝试按照 http://docs.ckan.org/en/latest/api/ 处的文档,通过 python 的 urllib2 使用 ckan api 调用导入数据集 我是 运行 的代码是 `

#!/usr/bin/env python
import urllib2
import urllib
import json
import pprint

dataset_dict = {
        'name': 'my_dataset_name5',
        'notes': 'A long description of my dataset',
}

data_string = urllib.quote(json.dumps(dataset_dict))

request = urllib2.Request(
        'http://<ckan server ip>/api/action/package_create')

request.add_header('Authorization', 'my api key')

response = urllib2.urlopen(request, data_string)
assert response.code == 200

response_dict = json.loads(response.read())
assert response_dict['success'] is True

created_package = response_dict['result']
pprint.pprint(created_package)`

但是它给出了以下错误:

Traceback (most recent call last):File "autodatv2.py", line 26, in response = urllib2.urlopen(request, data_string)File "/usr/lib64/python2.7/urllib2.py", line 154, in urlopen return opener.open(url, data, timeout)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 409: Conflict

我是 运行 CKAN 版本 2.4,在 Amazon ec2 实例上 python 2.7.10 和 echo $HTTP_PROXY 什么也没显示所以我假设它不是代理问题.. 有人可以提供任何帮助来解决这个问题

CKAN 正在返回 HTTP 错误 409,这几乎意味着任何事情。例如,您可能缺少一个字段,或者 CKAN 中可能已经存在该名称的数据集。

响应正文和 CKAN 日志中都会有解释问题的错误消息。

坦率地说,使用 urllib2 会让您的生活变得很艰难。要与 python 中的 CKAN API 对话,至少要使用 'requests',但最佳做法是使用 https://github.com/ckan/ckanapi,例如

import ckanapi

demo = ckanapi.RemoteCKAN('http://demo.ckan.org',
    apikey='phony-key',
    user_agent='ckanapiexample/1.0 (+http://example.com/my/website)')

pkg = demo.action.package_create(name='my-dataset', title='not going to work')