使用 urllib2 将 solr curl updateJSON 语法转换为 python

Jas*_*onB 2 python curl solr urllib2 libcurl

我一直在尝试学习 Solr4.0,我正在查看他们文档中的 JSON 文档更新, 如下所示:

cd example/exampledocs
curl 'http://localhost:8983/solr/update/json?commit=true' --data-binary @books.json -H 'Content-type:application/json'
Run Code Online (Sandbox Code Playgroud)

它工作正常,我可以在我的 solr 索引上看到更新的文档。但是,我想知道如何通过 urllib2 在 python 中使用这个 curl 命令。所以,像这样:

theurl=r"""http://localhost:8983/solr/update/json?commit=true --data-binary @books.json -H 'Content-type:application/json'"""
import urllib2
import httplib
import cookielib
...use urllib2 to post theurl
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用。看起来 urllib2 不能识别(例如-H显然看起来特定于 curl 的)上面形成的theurl. 应该如何格式化theurl以便我可以将它与 urllib2 一起使用?

Tod*_*ddR 5

我会尝试

import urllib2
with open('books.json', 'rb') as data_file:
    my_data = data_file.read()
req = urllib2.Request(url='http://localhost:8983/solr/update/json?commit=true',
                      data=my_data)
req.add_header('Content-type', 'application/json')
f = urllib2.urlopen(req)
# Begin using data like the following
print f.read()
Run Code Online (Sandbox Code Playgroud)

从中你可以看到 --data-binary 参数只是像POST请求一样发送到服务器的数据。当该参数以@ 符号开头时,表示从文件中读取数据。在本例中,它是文件“books.json”。您还需要发送标头( 的-H参数curl)。因此,您只需要add_header使用标头名称及其值来调用该方法。

希望这能让你开始。有关 urllib2 的更多信息,请访问http://docs.python.org/2/library/urllib2.html