我目前正在做一个项目,在这个项目中,我必须从代谢物数据库PubChem请求数据。我正在使用阿帕奇的HttpClient。我正在做以下工作:
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">等。
我想要的是,例如,我可以请求Java,它将粘贴与该ID相对应的值。我发现可以使用原生PubChem方法来实现这一点,但我需要使用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中运行)
所以,如果有人能帮我,那就太好了:)
发布于 2012-07-01 20:48:31
有多种方法可以做到这一点。
如果您希望将响应转换为bean,并且不期望响应的结构发生变化,那么我将考虑使用XStream。另一种选择是直接使用SAX解析器。
当然,最快捷的方法是将您的响应内容转换为bufferedReader。然后将该阅读器输入您正在使用的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 for服务客户端或XMLReaders,可以获得有关此主题的更多信息
发布于 2012-07-01 20:10:31
尝试使用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);https://stackoverflow.com/questions/11281775
复制相似问题