2

まず、私はPythonプログラマーではありません。私は新しいJavaとPHPのトリックを学んだ古いC犬ですが、Pythonはかなりクールな言語のように見えます。

なかなかフォローできないエラーが発生します。エラーは以下のコードに従います。

import httplib, urllib
url = "pdb-services-beta.nipr.com"
xml = '<?xml version="1.0"?><!DOCTYPE SCB_Request SYSTEM "http://www.nipr.com/html/SCB_XML_Request.dtd"><SCB_Request Request_Type="Create_Report"><SCB_Login_Data CustomerID="someuser" Passwd="somepass" /><SCB_Create_Report_Request Title=""><Producer_List><NIPR_Num_List_XML><NIPR_Num NIPR_Num="8980608" /><NIPR_Num NIPR_Num="7597855" /><NIPR_Num NIPR_Num="10166016" /></NIPR_Num_List_XML></Producer_List></SCB_Create_Report_Request></SCB_Request>'

params = {}
params['xmldata'] = xml

headers = {}
headers['Content-type'] = 'text/xml'
headers['Accept'] = '*/*'
headers['Content-Length'] = "%d" % len(xml)

connection = httplib.HTTPSConnection(url)
connection.set_debuglevel(1)
connection.request("POST", "/pdb-xml-reports/scb_xmlclient.cgi", params, headers)

response = connection.getresponse()
print response.status, response.reason
data = response.read()
print data
connection.close

エラーは次のとおりです。

トレースバック(最後の最後の呼び出し):   
 ファイル"C:\ Python27 \ tutorial.py"、14行目connection.request( "POST"、 "/pdb-xml-reports/scb_xmlclient.cgi"、params、headers)   
 ファイル"C:\ Python27 \ lib \ httplib.py"、行958、リクエストself._send_request(method、url、body、headers)   
 _send_request self.endheaders(body)のファイル "C:\ Python27 \ lib \ httplib.py"、行992
 ファイル"C:\ Python27 \ lib \ httplib.py"、行954、エンドヘッダーself._send_output(message_body)
 _send_output self.send(message_body)のファイル "C:\ Python27 \ lib \ httplib.py"、行818
 ファイル"C:\ Python27 \ lib \ httplib.py"、行790、send self.sock.sendall(data)
 ファイル"C:\ Python27 \ lib \ ssl.py"、229行目、sendall v = self.send(data [count:])
TypeError:ハッシュできないタイプ

私のログファイルには、xmldataパラメータが空であると記載されています。

何か案は?

4

2 に答える 2

2

.requestに渡すときは、paramsは文字列でなければならないと思います。これは、ハッシュがハッシュ可能ではないという事実のために、エラーを説明します。

最初にパラメータをエンコードしてみてください

params = urllib.urlencode(params)

別のコード例も以下の下部にあります。

http://docs.python.org/release/3.1.5/library/http.client.html

于 2012-06-18T12:19:29.170 に答える
0

フィードバックをお寄せいただきありがとうございます。

私はこれを難しすぎたと思います。私は別のルートに行きました、そしてそれはうまくいくようです。

import urllib2
URL = "https://pdb-services-beta.nipr.com/pdb-xml-reports/scb_xmlclient.cgi"
DATA = 'xmldata=<?xml version="1.0"?><!DOCTYPE SCB_Request SYSTEM "http://www.nipr.com/html/SCB_XML_Request.dtd"><SCB_Request Request_Type="Create_Report"><SCB_Login_Data CustomerID="someuser" Passwd="somepass" /><SCB_Create_Report_Request Title=""><Producer_List><NIPR_Num_List_XML><NIPR_Num NIPR_Num="8980608" /></NIPR_Num_List_XML></Producer_List></SCB_Create_Report_Request></SCB_Request>'
req = urllib2.Request(url=URL, data=DATA)
f = urllib2.urlopen(req)
print f.read()
于 2012-06-18T21:14:33.720 に答える