Hi , I am trying to access the GenScan server @ MIT to get gene predictions automated through java. Here is the code I managed to come up with. ( lot of it is cut & paste and me modifying )
public class POST_GenScan {
/**
 * @param args the command line arguments
 */
public static void getDATA() throws FileNotFoundException, UnsupportedEncodingException, IOException {
    String charset = "utf-8";
    String param = "value";
    //String boundary = "-----------------------------7db271286025a"; // Just generate some unique random value.
    String CRLF = "\r\n"; // Line separator required by multipart/form-data.
    String url = "http://genes.mit.edu/cgi-bin/genscanw_py.cgi";
    String boundary = Long.toHexString(System.currentTimeMillis());
    boundary = "--" + boundary;
    URLConnection connection = null;
    try {
        connection = new URL(url).openConnection();
    } catch (IOException ex) {
        Logger.getLogger(POST_GenScan.class.getName()).log(Level.SEVERE, null, ex);
    }
    connection.setDoOutput(true);
    connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
    connection.setRequestProperty("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.3");
    connection.setRequestProperty("Accept-Language", "en-US,en;q=0.8");
    PrintWriter writer = null;
    try {
        OutputStream output = null;
        try {
            output = connection.getOutputStream();
        } catch (IOException ex) {
            Logger.getLogger(POST_GenScan.class.getName()).log(Level.SEVERE, null, ex);
        }
        try {
            writer = new PrintWriter(new OutputStreamWriter(output, charset), true); // true = autoFlush, important!
        } catch (UnsupportedEncodingException ex) {
            Logger.getLogger(POST_GenScan.class.getName()).log(Level.SEVERE, null, ex);
        }
        // Send normal param.
        writer.append(boundary).append(CRLF);
        writer.append("Content-Disposition: form-data; name=\"-o\"").append(CRLF);
        writer.append(CRLF);
        writer.append("Vertebrate").append(CRLF);
        writer.append(boundary).append(CRLF).flush();
        writer.append("Content-Disposition: form-data; name=\"-e\"").append(CRLF);
        writer.append(CRLF);
        writer.append("1.00").append(CRLF);
        writer.append(boundary).append(CRLF).flush();
        writer.append("Content-Disposition: form-data; name=\"-n\"").append(CRLF);
        writer.append(CRLF);
        writer.append(CRLF);
        writer.append(boundary).append(CRLF).flush();
        writer.append("Content-Disposition: form-data; name=\"-p\"").append(CRLF);
        writer.append(CRLF);
        writer.append("Predicted peptides only").append(CRLF);
        writer.append(boundary).append(CRLF).flush();
        writer.append("--" + boundary).append(CRLF);
        writer.append("Content-Disposition: form-data; name=\"textFile\"; filename=\"\"").append(CRLF);
        writer.append("Content-Type: application/octet-stream").append(CRLF);
        writer.append(CRLF).flush();
        writer.append("Content-Disposition: form-data; name=\"-s\"").append(CRLF);
        writer.append(CRLF);
        writer.append("ATGACGATAAAGGCACGGCCTCCAACGAGACCTGTGGGCACGGCCATGTTGGGGGCGGGGCTTCCGGTCA").append(CRLF);
        writer.append(boundary).append(CRLF).flush();
        writer.append(boundary + "--").append(CRLF).flush();
        try {
            Thread.sleep(1000); // do nothing for 1000 miliseconds (1 second)
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        // Get the response
        BufferedReader rd = new BufferedReader(new InputStreamReader(connection.getInputStream()));
        String line;
        while ((line = rd.readLine()) != null) {
            // Process line...
            System.out.println(line);
        }
        rd.close();
    } catch (Exception e) {
        System.out.println(e);
    }
}
}
This gives a error something like this;
The above is a description of an error in a Python program, formatted for a Web browser because the 'cgitb' module was enabled. In case you are not reading this in a Web browser, here is the original traceback:
Traceback (most recent call last): File "/home/website/cgi-bin/genscanw_py.cgi", line 16, in <module> organism = form['-o'].value File "/usr/lib64/python2.5/cgi.py", line 567, in getitem raise KeyError, key KeyError: '-o'
I tried with a HTTP analyzer and the rawdata sent to the server is identical. Can anyone please see where I am going wrong. Thank,
This question is incomprehensible. Is it mit's genscanw_py.cgi that is throwing the error or yours? You will need to provide reproducible code for anyone to help you.
I think it is genscanw_py.cgi that is throwing the error. The http post is not well formed, and then the server cannot access the variable "-o" for example.