Probleme mit PUT-Kommando
Chris
- java
Hallo!
Ich habe ein sehr spezielles Problem, aber vielleicht kann mir jemand helfen.
Ich will BLAST (ein Programm um DNA-Sequenzen zu vergleichen) von JAVA aus ansteuern. Es gibt dazu ein Interface, laut der Doku (http://www.ncbi.nlm.nih.gov/BLAST/Doc/urlapi.html) muß man um z.B. die Sequenz AGGTTA mit der Datenbank "nr" zu vergleichen folgenden Befehl via HTTP senden:
"http://www.ncbi.nlm.nih.gov/blast/Blast.cgi?QUERY=555\ &DATABASE=nr&HITLIST_SIZE=10&FILTER=L\ &EXPECT=10&FORMAT_TYPE=HTML&PROGRAM=blastn&CLIENT=web\ &SERVICE=plain&NCBI_GI=on&PAGE=Nucleotides\ &CMD=Put"
Ich habe also folgendes gemacht:
//=========
try {
Socket sock = new Socket("www.ncbi.nlm.nih.gov", 80);
PrintStream os = new PrintStream(sock.getOutputStream());
BufferedReader br = new BufferedReader(new InputStreamReader (sock.getInputStream()));
String s = "http://www.ncbi.nlm.nih.gov/blast/Blast.cgi?QUERY=555\&DATABASE=nr&HITLIST_SIZE=10&FILTER=L\&EXPECT=10&FORMAT_TYPE=HTML&PROGRAM=blastn&CLIENT=web\&SERVICE=plain&NCBI_GI=on&PAGE=Nucleotides\&CMD=Put";
os.println(s);
String temp = br.readLine();
while (temp!=null)
{
System.err.println(temp);
temp = br.readLine();
}
br.close();
os.close();
sock.close();
} catch (IOException e) {
System.err.println(e.toString());
System.exit(1);
}
//======================================
Als Rückgabe sollte man jetzt eigentlich eine HTML-Datei bekommen, die eine Bearbeitungsnummer für den Auftrag enthält, ich bekomme aber immer nur:
Irgendwie scheint er meinen Befehl also wohl nicht zu erkennen, weiß vielleicht jemand warum? Probleme könnte es vielleicht mit der Codierung des Befehls geben, ich muß ja zwei "" machen, sonst kompiliert er ja nicht. Bei der zurückgegebenen Fehlermeldung steht an Stelle des "&" im Original ein "&", vielleicht liegt hier der Fehler? Aber wie kann ich das beheben?
Im Voraus vielen Dank für jede Hilfe
Hi,
try {
Socket sock = new Socket("www.ncbi.nlm.nih.gov", 80);
PrintStream os = new PrintStream(sock.getOutputStream());
Ok, Verbindung zum Server
BufferedReader br = new BufferedReader(new InputStreamReader (sock.getInputStream()));
String s = "http://www.ncbi.nlm.nih.gov/blast/Blast.cgi?QUERY=555\&DATABASE=nr&HITLIST_SIZE=10&FILTER=L\&EXPECT=10&FORMAT_TYPE=HTML&PROGRAM=blastn&CLIENT=web\&SERVICE=plain&NCBI_GI=on&PAGE=Nucleotides\&CMD=Put";
Ne schöne URL...
os.println(s);
Aber HTTP funktioniert nicht so, daß man einfach eine URL an einen Server schickt.
Beschäftige Dich mit http://www.ietf.org/rfc/rfc2616.txt.
cu,
Andreas
Ich habe ein sehr spezielles Problem, aber vielleicht kann mir jemand helfen.
Und Put-Problem ist eine denkbar schlechte Beschreibung.
"http://www.ncbi.nlm.nih.gov/blast/Blast.cgi?QUERY=555\ &DATABASE=nr&HITLIST_SIZE=10&FILTER=L\ &EXPECT=10&FORMAT_TYPE=HTML&PROGRAM=blastn&CLIENT=web\ &SERVICE=plain&NCBI_GI=on&PAGE=Nucleotides\ &CMD=Put"
Was sollen die Backslashes? Der URI sollte so aussehen;
http://www.ncbi.nlm.nih.gov/blast/Blast.cgi?QUERY=555&DATABASE=nr&HITLIST_SIZE=10&FILTER=L&EXPECT=10&FORMAT_TYPE=HTML&PROGRAM=blastn&CLIENT=web&SERVICE=plain&NCBI_GI=on&PAGE=Nucleotides&CMD=Put
Dann klappt's auch mit dem Aufruf über den Browser...
Socket sock = new Socket("www.ncbi.nlm.nih.gov", 80);
Gibt's 'nen Grund, nicht URL und URLConnection zu verwenden?