Re: [Zope] Posting a document to Zope via a Java Program
Hello, With you code I get : 000719: 3c 70 3e 0a 20 20 3c 73 74 72 6f 6e 67 3e 45 72 < p > . < s t r o n g > E r 000735: 72 6f 72 20 54 79 70 65 3a 20 56 61 6c 75 65 45 r o r T y p e : V a l u e E 000751: 72 72 6f 72 3c 2f 73 74 72 6f 6e 67 3e 3c 62 72 r r o r < / s t r o n g > < b r 000767: 3e 0a 20 20 3c 73 74 72 6f 6e 67 3e 45 72 72 6f > . < s t r o n g > E r r o 000783: 72 20 56 61 6c 75 65 3a 20 49 6e 76 61 6c 69 64 r V a l u e : I n v a l i d 000799: 20 62 6f 75 6e 64 61 72 79 20 69 6e 20 6d 75 6c b o u n d a r y i n m u l 000815: 74 69 70 61 72 74 20 66 6f 72 6d 3a 20 27 27 3c t i p a r t f o r m : ' ' < 000831: 2f 73 74 72 6f 6e 67 3e 3c 62 72 3e 20 0a 20 20 / s t r o n g > < b r > . The boundary you are using look wrong. I was doing this in python and I think I was getting the boundary from some library, I was not creating it myself. Gilles ----- Original Message ----- From: "D Bamud" <nougain@cad.delhi.nic.in> To: "Zope Mailing List" <zope@zope.org> Sent: Thursday, October 10, 2002 8:16 AM Subject: [Zope] Posting a document to Zope via a Java Program
My idea is to submit a document using a Java Client and not the browser. I could do this successfully using my *JAVA HTTP Client program* written by me. The server I used is Tomcat4.0.3 and a JSP program Upload.jsp (that
uses
com.orelly.servlet.MultiPart). If it works fine here it should work fine with any HTTP server including Zope. But when I try "Zope" server (with program http://localhost:8080/Examples/FileLibrary/addFile) it gives me a 500 error. I am posting the error message below if you can give some clue... (I used the specs from RFC1867)
null: HTTP/1.1 500 Internal Server Error Server: Zope/(Zope 2.5.1 (binary release, python 2.1, win32-x86), python 2.1.3, win32) ZServer/1.1b1 Date: Thu, 10 Oct 2002 12:57:34 GMT Bobo-Exception-File: C:\Zope\bin\lib\cgi.py Content-Type: text/html Bobo-Exception-Type: ValueError Bobo-Exception-Value: bobo exception Etag: Content-Length: 1704 Bobo-Exception-Line: 603
getRequestMethod : POST getResponseCode : 500 getResponseMessage : Internal Server Error
--------------------------------------------------------- Here is my entire working Java HTTP Client program --------------------------------------------------------- import java.io.*; import java.net.*;
/** * RFC 1867 * ======== * Content-type: multipart/form-data, boundary=AaB03x * * --AaB03x * content-disposition: form-data; name="field1" * * Joe Blow * --AaB03x * content-disposition: form-data; name="pics"; filename="file1.txt" * Content-Type: text/plain * * ... contents of file1.txt ... * --AaB03x-- */ public class PostDocument { public static void main(String[] args) throws Exception { // // CONSTANTS // String url = "http://localhost:8080/Examples/FileLibrary/addFile"; // <--- Zope/Python // String url = "http://localhost:8080/rcn/jsp/UploadFile.jsp?action=upload"; // <--- Tomcat/JSP String docPath = "D:\\rcn\\java\\HttpURLConnection\\testdoc.txt"; String bndry = "AaB03x"; String paramName = "file"; String fileName = "testdoc.txt";
// // CREATE AN HTTP CONNECTION // HttpURLConnection httpcon = (HttpURLConnection) ((new URL(url).openConnection())); httpcon.setDoOutput(true); httpcon.setUseCaches(false); // ??? Not Required? httpcon.setRequestMethod("POST"); httpcon.setRequestProperty("Content-type", "multipart/form-data, boundary=" +bndry); // this is new line httpcon.connect();
// // OPEN THE READ AND WRITE STREAMS // System.out.println("Posting " +docPath +"..."); File file = new File(docPath); FileInputStream is = new FileInputStream(file); OutputStream os = httpcon.getOutputStream();
// // WRITE THE FIRST/START BOUNDARY // String disptn = "--" +bndry +"\r\ncontent-disposition: form-data; name=\"" +paramName +"\"; filename=\"" +fileName +"\"\r\nContent-Type: text/plain\r\n\r\n"; System.out.print(disptn); os.write(disptn.getBytes());
// // WRITE THE FILE CONTENT // byte[] buffer = new byte[4096]; int bytes_read; while((bytes_read = is.read(buffer)) != -1) { os.write(buffer, 0, bytes_read); System.out.print(new String(buffer, 0, bytes_read)); }
// // WRITE THE CLOSING BOUNDARY // String boundar = "\r\n--" +bndry +"--"; System.out.print(boundar); os.write(boundar.getBytes()); // another 2 new lines
// // FLUSH / CLOSE THE STREAMS // os.flush(); os.close(); is.close();
// DEBUG System.out.println("\n....Done!!!...\n\n"); dump(httpcon); }
public static void dump(HttpURLConnection httpcon) throws IOException { int n=0; // n=0 has no key, and the HTTP return status in the value field String headerKey; String headerVal;
while (true){ headerKey = httpcon.getHeaderFieldKey(n); headerVal = httpcon.getHeaderField(n);
if (headerKey != null || headerVal != null) { System.out.println(headerKey +": " +headerVal); } else { break; }
n++; }
System.out.println(); System.out.println("getRequestMethod : " +httpcon.getRequestMethod()); System.out.println("getResponseCode : " +httpcon.getResponseCode()); System.out.println("getResponseMessage : " +httpcon.getResponseMessage()); } }
_______________________________________________ Zope maillist - Zope@zope.org http://lists.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope-dev )
Hi Gilles and All, Well I am still struggling with this. Gilles, you mentioned that the "boundary" value might be picked from some library by Zope. But I guess (but not sure) that the request is created by the client (browser) ie the boundary value is also entered by the browser. If not then Zope should send some boundary value somehow alongwith the FORM html code. I have added the "Java Code" at the bottom of the page. This code works fine with another Form submission form written by me but not with the Zope form as mentioned in the code. Could you or someone help me in detecting out as what is the problem. Thanks ----- Original Message ----- From: "Gilles" <gilles.lavaux@esrin.esa.it> To: <zope@zope.org> Sent: Friday, October 11, 2002 3:57 AM Subject: Re: [Zope] Posting a document to Zope via a Java Program
Hello,
With you code I get :
000719: 3c 70 3e 0a 20 20 3c 73 74 72 6f 6e 67 3e 45 72 < p > . < s t r o n g > E r 000735: 72 6f 72 20 54 79 70 65 3a 20 56 61 6c 75 65 45 r o r T y p e : V a l u e E 000751: 72 72 6f 72 3c 2f 73 74 72 6f 6e 67 3e 3c 62 72 r r o r < / s t r o n g > < b r 000767: 3e 0a 20 20 3c 73 74 72 6f 6e 67 3e 45 72 72 6f > . < s t r o n g > E r r o 000783: 72 20 56 61 6c 75 65 3a 20 49 6e 76 61 6c 69 64 r V a l u e : I n v a l i d 000799: 20 62 6f 75 6e 64 61 72 79 20 69 6e 20 6d 75 6c b o u n d a r y i n m u l 000815: 74 69 70 61 72 74 20 66 6f 72 6d 3a 20 27 27 3c t i p a r t f o r m : ' ' < 000831: 2f 73 74 72 6f 6e 67 3e 3c 62 72 3e 20 0a 20 20 / s t r o n g > < b r > .
The boundary you are using look wrong. I was doing this in python and I think I was getting the boundary from some library, I was not creating it myself.
Gilles ----- Original Message ----- From: "D Bamud" <nougain@cad.delhi.nic.in> To: "Zope Mailing List" <zope@zope.org> Sent: Thursday, October 10, 2002 8:16 AM Subject: [Zope] Posting a document to Zope via a Java Program
My idea is to submit a document using a Java Client and not the browser.
I
could do this successfully using my *JAVA HTTP Client program* written by me. The server I used is Tomcat4.0.3 and a JSP program Upload.jsp (that uses com.orelly.servlet.MultiPart). If it works fine here it should work fine with any HTTP server including Zope. But when I try "Zope" server (with program http://localhost:8080/Examples/FileLibrary/addFile) it gives me a 500 error. I am posting the error message below if you can give some clue... (I used the specs from RFC1867)
null: HTTP/1.1 500 Internal Server Error Server: Zope/(Zope 2.5.1 (binary release, python 2.1, win32-x86), python 2.1.3, win32) ZServer/1.1b1 Date: Thu, 10 Oct 2002 12:57:34 GMT Bobo-Exception-File: C:\Zope\bin\lib\cgi.py Content-Type: text/html Bobo-Exception-Type: ValueError Bobo-Exception-Value: bobo exception Etag: Content-Length: 1704 Bobo-Exception-Line: 603
getRequestMethod : POST getResponseCode : 500 getResponseMessage : Internal Server Error
--------------------------------------------------------- Here is my entire working Java HTTP Client program --------------------------------------------------------- import java.io.*; import java.net.*;
/** * RFC 1867 * ======== * Content-type: multipart/form-data, boundary=AaB03x * * --AaB03x * content-disposition: form-data; name="field1" * * Joe Blow * --AaB03x * content-disposition: form-data; name="pics"; filename="file1.txt" * Content-Type: text/plain * * ... contents of file1.txt ... * --AaB03x-- */ public class PostDocument { public static void main(String[] args) throws Exception { // // CONSTANTS // String url = "http://localhost:8080/Examples/FileLibrary/addFile"; // <--- Zope/Python // String url = "http://localhost:8080/rcn/jsp/UploadFile.jsp?action=upload"; // <--- Tomcat/JSP String docPath = "D:\\rcn\\java\\HttpURLConnection\\testdoc.txt"; String bndry = "AaB03x"; String paramName = "file"; String fileName = "testdoc.txt";
// // CREATE AN HTTP CONNECTION // HttpURLConnection httpcon = (HttpURLConnection) ((new URL(url).openConnection())); httpcon.setDoOutput(true); httpcon.setUseCaches(false); // ??? Not Required? httpcon.setRequestMethod("POST"); httpcon.setRequestProperty("Content-type", "multipart/form-data, boundary=" +bndry); // this is new line httpcon.connect();
// // OPEN THE READ AND WRITE STREAMS // System.out.println("Posting " +docPath +"..."); File file = new File(docPath); FileInputStream is = new FileInputStream(file); OutputStream os = httpcon.getOutputStream();
// // WRITE THE FIRST/START BOUNDARY // String disptn = "--" +bndry +"\r\ncontent-disposition: form-data; name=\"" +paramName +"\"; filename=\"" +fileName +"\"\r\nContent-Type: text/plain\r\n\r\n"; System.out.print(disptn); os.write(disptn.getBytes());
// // WRITE THE FILE CONTENT // byte[] buffer = new byte[4096]; int bytes_read; while((bytes_read = is.read(buffer)) != -1) { os.write(buffer, 0, bytes_read); System.out.print(new String(buffer, 0, bytes_read)); }
// // WRITE THE CLOSING BOUNDARY // String boundar = "\r\n--" +bndry +"--"; System.out.print(boundar); os.write(boundar.getBytes()); // another 2 new lines
// // FLUSH / CLOSE THE STREAMS // os.flush(); os.close(); is.close();
// DEBUG System.out.println("\n....Done!!!...\n\n"); dump(httpcon); }
public static void dump(HttpURLConnection httpcon) throws IOException { int n=0; // n=0 has no key, and the HTTP return status in the value field String headerKey; String headerVal;
while (true){ headerKey = httpcon.getHeaderFieldKey(n); headerVal = httpcon.getHeaderField(n);
if (headerKey != null || headerVal != null) { System.out.println(headerKey +": " +headerVal); } else { break; }
n++; }
System.out.println(); System.out.println("getRequestMethod : " +httpcon.getRequestMethod()); System.out.println("getResponseCode : " +httpcon.getResponseCode()); System.out.println("getResponseMessage : " +httpcon.getResponseMessage()); } }
_______________________________________________ Zope maillist - Zope@zope.org http://lists.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope-dev )
_______________________________________________ Zope maillist - Zope@zope.org http://lists.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope-dev )
participants (2)
-
D Bamud -
Gilles