Graham Dumpleton
grahamd at dscpl.com.au
Wed Apr 5 07:47:09 EDT 2006
I am coming to the conclusion that the file produced by Flash is malformed. Even if I were to get rid of the double \r\r sequences, replacing them with a single \r, you end up with no blank like after: Content-Disposition: form-data; name="Upload" which means that: Submit Query gets interpreted as a header and thus why it dies as there is no colon on that line. Anyone got any better ideas? Bedtime for me now. Graham On 05/04/2006, at 9:32 PM, Graham Dumpleton wrote: > > 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 > > > > > > _______________________________________________ > Mod_python mailing list > Mod_python at modpython.org > http://mailman.modpython.org/mailman/listinfo/mod_python
|