2012-07-01 67 views
2

我目前正在做一個項目,我必須從代​​謝數據庫PubChem中請求數據。我正在使用Apache的HttpClient。我做了以下情況:如何在Java中使用httpClient到Filer的Filer部分

HttpClient httpclient = new DefaultHttpClient(); 
HttpGet pubChemRequest = new HttpGet("http://pubchem.ncbi.nlm.nih.gov/summary/summary.cgi?cid=" 
    + cid + "&disopt=SaveXML"); 
pubChemRequest.getAllHeaders(); 
System.out.println(pubChemRequest); 
HttpResponse response = null; 
response = httpclient.execute(pubChemRequest); 
HttpEntity entity = response.getEntity(); 
pubChemInchi = EntityUtils.toString(entity); 

的問題是,這個碼流的整個XML文件:

<?xml version="1.0"?> 
<PC-Compound 
xmlns="http://www.ncbi.nlm.nih.gov" 
xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" 
xs:schemaLocation="http://www.ncbi.nlm.nih.gov ftp://ftp.ncbi.nlm.nih.gov/pubchem/specifications/pubchem.xsd"> 

我想的是,我可以要求,例如, PubChem ID,它將粘貼與該ID相對應的值。我發現這可以用本地Java方法完成,但我需要使用HttpClient。 隨着本地Java,它會做這樣的:

cid = 5282253 
reader = new PCCompoundXMLReader(
new URL("http://pubchem.ncbi.nlm.nih.gov/summary/summary.cgi?cid=" + cid + "&disopt=SaveXML").newInputStream()) 
mol = reader.read(new NNMolecule()) 
println "CID: " + mol.getProperty("PubChem CID") 

(注:這段代碼寫在Groovy的,但它也經過了一些調整工作中的Java)

所以,如果有人能幫助我,那將是巨大的:)

回答

1

有多種方法可以做到這一點。

如果你想把響應變成一個bean,並且不期望響應的結構發生變化,我會看看使用XStream。 另一種選擇是直接使用SAX解析器。

當然,快速和骯髒的方法是將您的響應內容變成緩衝讀取器。然後將該閱讀器提供給您正在使用的XMLReader。

一個例子使用的是從上面的代碼將是:

HttpClient httpclient = new DefaultHttpClient(); 
HttpGet pubChemRequest = new HttpGet("http://pubchem.ncbi.nlm.nih.gov/summary/summary.cgi?cid=" 
    + cid + "&disopt=SaveXML"); 
pubChemRequest.getAllHeaders(); 
System.out.println(pubChemRequest); 
HttpResponse response = null; 
response = httpclient.execute(pubChemRequest); 
BufferedReader br = new BufferedReader(new InputStreamReader((response.getEntity().getContent()))); 
cid = 5282253 
reader = new PCCompoundXMLReader(br) 
mol = reader.read(new NNMolecule()) 
println "CID: " + mol.getProperty("PubChem CID") 

谷歌搜索RESTful Web服務客戶端或XMLReaders應該給你關於這個問題的大量詳細信息

0

嘗試使用的NameValuePair

對於如:

List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1); 

nameValuePairs.add(new BasicNameValuePair("username", user123)); 

nameValuePairs.add(new BasicNameValuePair("password", pass123)); 

httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

HttpResponse response = httpclient.execute(httppost); 
相關問題