Graham Dumpleton
grahamd at dscpl.com.au
Wed Apr 5 07:32:50 EDT 2006
On 05/04/2006, at 9:28 PM, Harold J. Ship wrote: > Ok, here's the output. > > ------------KM7GI3gL6cH2gL6gL6cH2gL6cH2KM7 > > Content-Disposition: form-data; name="Filename" > > > > sample.txt > > ------------KM7GI3gL6cH2gL6gL6cH2gL6cH2KM7 > > Content-Disposition: form-data; name="Filedata"; filename="sample.txt" > > Content-Type: application/octet-stream > > > > Start of Sample Text File Contents > > End of Sample Text File Contents > > > > ------------KM7GI3gL6cH2gL6gL6cH2gL6cH2KM7 > > Content-Disposition: form-data; name="Upload" > > Submit Query > > ------------KM7GI3gL6cH2gL6gL6cH2gL6cH2KM7 I'm not an expert on FieldStorage as I stayed out of all the discussions on it when it was being improved. I am also not up on what the content type application/x-www-form-urlencoded is all about. All the same, I'll share what I found so far in case it helps someone else. First off, I don't get an error, but I don't believe I get correct results either. To test, what I did was create a handler containing: from mod_python import apache, util def handler(req): apache.log_error('headers_in=%s'%req.headers_in) req.content_type = 'text/plain' form = util.FieldStorage(req) for field in form.list: apache.log_error('name=%s' % `field.name`) apache.log_error('value=%s' % `field.value`) req.write('done') return apache.OK I then used "ab" to post your file to a URL mapping to that handler. ab -p post.dat -T 'multipart/form-data; boundary=---------- KM7GI3gL6cH2gL6gL6cH2gL6cH2KM7^M' http://localhost:8082/testing/ upload-1/dummy Note that that is actually a real \r (CR) where ^M is shown in the boundary. Without that it wouldn't work. I am not sure though whether that is simply due to CR LF weirdness in way file was created and then how it is being interpreted by "ab" on Mac OS X when given to it as input. Anyway, result of that is: [Wed Apr 05 21:26:24 2006] [error] headers_in={'Content-type': 'multipart/form-data; boundary=---------- KM7GI3gL6cH2gL6gL6cH2gL6cH2KM7\r', 'Content-length': '498', 'Accept': '*/*', 'Host': 'localhost:8082', 'User-Agent': 'ApacheBench/1.3d'} [Wed Apr 05 21:26:24 2006] [error] [client 127.0.0.1] PythonHandler upload: Traceback (most recent call last): [Wed Apr 05 21:26:24 2006] [error] [client 127.0.0.1] PythonHandler upload: File "/System/Library/Frameworks/Python.framework/Versions/ 2.3/lib/python2.3/site-packages/mod_python/apache.py", line 308, in HandlerDispatch\n result = object(req) [Wed Apr 05 21:26:24 2006] [error] [client 127.0.0.1] PythonHandler upload: File "/Users/grahamd/Workspaces/testing/upload-1/ upload.py", line 9, in handler\n form = util.FieldStorage(req) [Wed Apr 05 21:26:24 2006] [error] [client 127.0.0.1] PythonHandler upload: File "/System/Library/Frameworks/Python.framework/Versions/ 2.3/lib/python2.3/site-packages/mod_python/util.py", line 180, in __init__\n h, v = line.split(":", 1) [Wed Apr 05 21:26:24 2006] [error] [client 127.0.0.1] PythonHandler upload: ValueError: unpack list of wrong size Thus, have duplicated it. Note that this may possibly be something to do with strangeness in line endings. First their was the issue above with CR, but there are other nasties in input with CR LF. See following "od" dump. 0000000 - - - - - - - - - - - - K M 7 G 0000020 I 3 g L 6 c H 2 g L 6 g L 6 c H 0000040 2 g L 6 c H 2 K M 7 \r \r \n C o n 0000060 t e n t - D i s p o s i t i o n 0000100 : f o r m - d a t a ; n a m 0000120 e = " F i l e n a m e " \r \r \n \r 0000140 \r \n s a m p l e . t x t \r \r \n - 0000160 - - - - - - - - - - - K M 7 G I 0000200 3 g L 6 c H 2 g L 6 g L 6 c H 2 0000220 g L 6 c H 2 K M 7 \r \r \n C o n t 0000240 e n t - D i s p o s i t i o n : 0000260 f o r m - d a t a ; n a m e 0000300 = " F i l e d a t a " ; f i l 0000320 e n a m e = " s a m p l e . t x 0000340 t " \r \r \n C o n t e n t - T y p 0000360 e : a p p l i c a t i o n / o 0000400 c t e t - s t r e a m \r \r \n \r \r 0000420 \n S t a r t o f S a m p l e 0000440 T e x t F i l e C o n t e 0000460 n t s \r \r \n E n d o f S a m 0000500 p l e T e x t F i l e C o 0000520 n t e n t s \r \r \n \r \r \n - - - - 0000540 - - - - - - - - K M 7 G I 3 g L 0000560 6 c H 2 g L 6 g L 6 c H 2 g L 6 0000600 c H 2 K M 7 \r \r \n C o n t e n t 0000620 - D i s p o s i t i o n : f o 0000640 r m - d a t a ; n a m e = " U 0000660 p l o a d " \r \r \n S u b m i t 0000700 Q u e r y \r \r \n - - - - - - - - 0000720 - - - - K M 7 G I 3 g L 6 c H 2 0000740 g L 6 g L 6 c H 2 g L 6 c H 2 K 0000760 M 7 0000762 See the "\r \r \n \r \r \n" sequences. Not sure that I'll have much more time to play with this tonight, so posting this progress in case someone else wants to pick up and continue. Graham
|