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

时间:2015-11-18 12:55:38

标签: python-2.7 ckan

您好我一直在尝试使用ckan api调用通过python' urllib2导入数据集,遵循http://docs.ckan.org/en/latest/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)`

但是它会出现以下错误:

  

回溯(最近一次呼叫最后一次):文件&#34; autodatv2.py&#34;,第26行,in   response = urllib2.urlopen(request,data_string)文件   &#34; /usr/lib64/python2.7/urllib2.py" ;,第154行,在urlopen中返回   opener.open(url,data,timeout)File&#34; /usr/lib64/python2.7/urllib2.py",   第437行,在开放响应中= meth(req,response)文件   &#34; /usr/lib64/python2.7/urllib2.py" ;,第550行,在http_response&#39; http&#39;中,   请求,响应,代码,消息,hdrs)文件   &#34; /usr/lib64/python2.7/urllib2.py" ;,第475行,错误返回   self._call_chain(* args)File&#34; /usr/lib64/python2.7/urllib2.py" ;, line   409,在_call_chain result = func(* args)文件中   &#34; /usr/lib64/python2.7/urllib2.py",第558行,http_error_default   提出HTTPError(req.get_full_url(),code,msg,hdrs,fp)   urllib2.HTTPError:HTTP错误409:冲突

我在亚马逊ec2实例上使用python 2.7.10运行CKAN 2.4版本 echo $ HTTP_PROXY没有显示任何内容,因此我假设它不是代理问题。 有人可以提供任何帮助来解决这个问题

1 个答案:

答案 0 :(得分:4)

CKAN返回HTTP错误409,这几乎可能意味着什么。例如,您可能有一个缺失的字段,或者CKAN中可能已存在该名称的数据集。

将在响应正文中以及CKAN日志中解释问题时出现错误消息。

坦率地说,使用urllib2让自己的生活变得艰难。要在python中与CKAN API交谈,至少使用“请求”,但最佳做法是使用{{3}},例如。

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')