python
  • typeerror
  • httplib
  • 2012-06-18 2 views 2 likes 
    2

    먼저 파이썬 프로그래머가 아닙니다. 저는 새로운 Java 및 PHP 트릭을 배웠던 오래된 C 개이지만 파이썬은 꽤 멋진 언어처럼 보입니다.python unhashable type - 게시 XML 데이터

    내가 따라갈 수없는 오류가 나타납니다. 오류는 아래 코드를 따릅니다.

    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 
    

    다음은 오류입니다 :

     
    Traceback (most recent call last): 
    File "C:\Python27\tutorial.py", line 14, in connection.request("POST", "/pdb-xml-reports/scb_xmlclient.cgi", params, headers) 
    File "C:\Python27\lib\httplib.py", line 958, in request self._send_request(method, url, body, headers) 
    File "C:\Python27\lib\httplib.py", line 992, in _send_request self.endheaders(body) 
    File "C:\Python27\lib\httplib.py", line 954, in endheaders self._send_output(message_body) 
    File "C:\Python27\lib\httplib.py", line 818, in _send_output self.send(message_body) 
    File "C:\Python27\lib\httplib.py", line 790, in send self.sock.sendall(data) 
    File "C:\Python27\lib\ssl.py", line 229, in sendall v = self.send(data[count:]) 
    TypeError: unhashable type 
    

    내 로그 파일은 XMLDATA 매개 변수가 비어 있다고 말한다.

    아이디어가 있으십니까?

    +1

    문서 후에 :?은'body' 인수가 존재하는 경우,이 헤더가 그래서 내 PARAMS 인수가 문자열이어야한다 – ddzialak

    +0

    를 완료 한 후 전송하는 데이터의 문자열이어야한다 ... 나는 그것을주지 시도. 감사. – eterry28

    답변

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

    나는,이 해시

    params = urllib.urlencode(params) 
    
    로 먼저 PARAMS을 인코딩하는 해쉬

    시도가 아닌 것을 사실로 인해, 오류를 설명 할 PARAMS이 .request을 통과하는 문자열이어야한다 생각

    당신의 맨 아래에 너무 다른 코드 예제를 찾을 수 있습니다 의견

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

    +0

    감사합니다 Christoph. 나는 그것을 살펴볼 것이다. – eterry28

    관련 문제