2013-05-28 193 views
1

這裏是我的原代碼如何curl命令行轉換爲pycurl代碼

import urllib, urllib2 
from xml.dom import minidom 

base_url = 'test.com:8000' 
username = 'MyId' 
password = 'passwd' 
search_query = 'search error | head 10' 

# Login and get the session key 
request = urllib2.Request(base_url + '/servicesNS/MyId/search/auth/login', 
data = urllib.urlencode({'username': username, 'password': password})) 

server_content = urllib2.urlopen(request) 

session_key = minidom.parseString(server_content.read()).\ 
getElementsByTagName('sessionKey')[0].childNodes[0].nodeValue 
print "Session Key: %s" % session_key 

# Perform a search 
request = urllib2.Request(base_url + '/servicesNS/MyId/search/search/jobs/export', 
data = urllib.urlencode({'search': search_query,'output_mode': 'json'}), 
headers = { 'Authorization': ('Splunk %s' %session_key)}) 
search_results = urllib2.urlopen(request) 
print search_results.read() 

它會導致一個404錯誤,所以我決定用捲曲。

我有這樣的捲曲讚揚

curl -k -u myID:Passwd -d 'search="google.com | head 10"' -d "output_mode=json" https://test.com:8089/servicesNS/myId/search/search/jobs/export 

我試圖使用pycurl調用Joson。

如何將其轉換爲pycurl?

預先感謝您。

+0

向我們展示您的代碼 - 您嘗試過哪些方法無效? –

+0

爲什麼你的base_url不以'http://'開頭?哪兩個請求404s? – millimoose

+1

您的urllib2代碼和curl命令不匹配:不同的端口,不同的請求。 ElementTree提供了更好的xml api:['session_key = etree.parse(server_content).findtext(「.//sessionKey」)'](http://ideone.com/gGyky4) – jfs

回答

4

到curl命令行轉換到使用libcurl什麼最好的辦法(如pycurl或其他綁定),是運行與「--libcurl output.c」追加到它的命令行,然後你看看創建胚胎,因爲它顯示捲曲必須做的事情。

將該C代碼轉換爲pycurl代碼通常很簡單。