2

私は Solr4.0 を学ぼうとしてきましたが、ドキュメントで次のような JSON ドキュメントの更新を見て ます。

cd example/exampledocs
curl 'http://localhost:8983/solr/update/json?commit=true' --data-binary @books.json -H 'Content-type:application/json'

正常に動作し、solr インデックスで更新されたドキュメントを確認できます。ただし、このcurlコマンドをpythonでurllib2を介して使用するにはどうすればよいか疑問に思っていました。したがって、次のようなものです:

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

ただし、これは機能しません。urllib2 は (-H明らかに curl 固有のように見える など) 上記のtheurl. theurlurllib2 で使用できるようにするには、どのようにフォーマットすればよいですか?

4

2 に答える 2

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

このことから、 --data-binary パラメーターは、POSTリクエストのようにサーバーに送信される単なるデータであることがわかります。そのパラメーターが @ 記号で始まる場合、ファイルからデータを読み取ることを意味します。この場合、それはファイル「books.json」です。-Hヘッダー ( のパラメーター)も送信する必要がありますcurladd_headerしたがって、ヘッダー名とその値を指定してメソッドを呼び出すだけで済みます。

これで始められることを願っています。urllib2 の詳細については、http: //docs.python.org/2/library/urllib2.html を参照してください。

于 2013-03-17T12:37:23.170 に答える
0

urllib2 は Python 3.x では使用できないため、この代替手段を提供します。このコード スニペットは、Python 3.3 と優れた要求ライブラリを使用して機能しました

 import requests

 def postXml(host, xmlFile):
     url = "http://%s:8983/solr/update" % host
     headers = {"content-type" : "text/xml" }
     params = {"commit" : "false" }
     payload = open(xmlFile, "rb").read()
     r = requests.post(url, data=payload, params=params,  headers=headers)
     print("got back: %s" % r.text)
于 2014-07-15T17:31:24.550 に答える