Chris: Probleme mit PUT-Kommando

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:

==============================
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML><HEAD>
<TITLE>501 Method Not Implemented</TITLE>
</HEAD><BODY>
<H1>Method Not Implemented</H1>
http://www.ncbi.nlm.nih.gov/blast/B...es&CMD=Put to /index.shtml not supported.<P>
Invalid method in request http://www.ncbi.nlm.nih.gov/blast/B...s\&CMD=Put<P>
</BODY></HTML>

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

  1. 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

    --
    MudGuard? Siehe http://www.Mud-Guard.de/
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
  2. 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?