2011-08-04 37 views
-4

我對互聯網的工作方式不太瞭解,所以我不確定這個java方法在做什麼或如何最好地在python中複製它。我嘗試了幾種不同的方法,包括urllibs和套接字,但似乎沒有任何工作。唯一一次我得到一個響應時,我最終得到一個巨大的HTML文檔時,響應應該只有大約5行xml。將Python複製到Python

任何幫助將不勝感激,謝謝你們:)。

try { 
      URL url = new URL(sPROTOCOL, sHOSTNAME, sPAGENAME); 
      URLConnection url_con = url.openConnection(); 
      url_con.setDoInput(true); 
      url_con.setDoOutput(true); 
      url_con.setUseCaches (false); 
      url_con.setRequestProperty ("content-type", "application/x-www-form-urlencoded"); 

      String input_xml = make_XML(sAppID, sAppPassword, sUserID, sPassword); 
      if (bDEBUG) { 
        System.out.println("\nINPUT XML------------------\n" + input_xml); 
        System.out.println("\nEND INPUT XML--------------\n"); 
      } 
      BufferedWriter writebuf = new BufferedWriter(new OutputStreamWriter(url_con.getOutputStream())); 
      writebuf.write("XMLData="); 
      writebuf.write(URLEncoder.encode(input_xml, "UTF-8")); //Java 1.4.x and later 
      //writebuf.write(URLEncoder.encode(input_xml)); //Java 1.3.1 and earlier 
      writebuf.flush(); 
      writebuf.close(); 
      writebuf = null; 
      HashMap hm = parseResp(url_con); 
+4

這不足以幫助移植。它調用自定義方法('make_XML'和'parseResp'),猜測它們返回的內容毫無意義。 –

回答

1

它看起來像它的打開到sHOSTNAME的連接,發送由make_XML生成的XML數據(顯然爲稱爲XMLDATA單個POST參數,所以sPROTOCOL必須是HTTP),然後處理在parseResp的響應。

在Python中你會使用httplib。在http://docs.python.org/library/httplib.html的最後一個例子是做類似的事情(但發送三個參數)。請注意,您發佈的代碼有點醜陋,因爲它明確寫入POST內容 - 在python中,您只需將XML作爲參數。

+0

我得到的響應爲 「否XML收到」 與下列: 'URL = LOCATION my_xml = 「XML_Data =」 + make_XML(APP_ID,app_password,USER_ID,USER_PASSWORD) PARAMS = urllib.urlencode({' XML_Data ':my_xml}) header = {「content-type」:「application/x-www-form-urlencoded」} conn = httplib.HTTPSConnection(HOST) conn.request(「POST」,API_URL,params,headers ) response = conn.getresponse() print response.read()' – Jon

+1

好開始,它是XMLData,而不是XML_Data。更一般地說,我不打算調試你的整個程序。相反,使用wireshark或tcpdump來獲取使用現有程序和使用程序時的數據,並對其進行比較。 –