urllib2 httplib.BadStatusLine exception while opening a page on an Oracle HTTP Server

ak aktests at gmail.com
Sun Mar 1 22:22:18 CET 2009


which website have you tested it on ?
My tests were basically on https://www.orange.sk and http://www.orange.sk
(the first fails, and not the second one, which led me to think
there's a bug in python's SSL implementation for this particular web
server) (Oracle) with python 2.5



On Feb 19, 1:57 pm, O Peng <oliverp... at gmail.com> wrote:
> I'm running into a similar problem with the BadStatusLine.
> The source code for httplib.py in the problem is as follows:
>
> class HTTPResponse:
>     ...
>     def _read_status(self):
>         line = self.fp.readline()
>         ...
>         if not line:
>             # Presumably, the server closed the connection before
>             # sending a valid response.
>             raise BadStatusLine(line)
>
> However, I found that right before the 'raise BadStatusLine(line)'
> when I ran the following:
>
> restOfResponse = self.fp.read()
> print restOfResponse
>
> restOfResponse is NOT empty.  In fact, when I run self.fp.read() at
> the beginning of the begin() function, it is not empty at all.
> This leads me to believe there is a bug with the self.fp.readline()
> (socket._fileobject.readline()) function.  For me it only fails
> sometimes.
>
> This behavior is only observed on Windows, Python 2.5.  Running it on
> Mac OS X, Python 2.5 yielded no problems.
>
> On Jan 19, 3:48 pm, ak <akte... at gmail.com> wrote:
>
> > On Jan 19, 10:00 pm, ak <akte... at gmail.com> wrote:
>
> > > Hi everyone,
>
> > > I have a problem withurllib2on this particular url, hosted on an
> > > Oracle HTTP Server
>
> > >http://www.orange.sk/eshop/sk/portal/catalog.html?type=post&subtype=p...
>
> > > which gets 302 redirected tohttps://www.orange.sk/eshop/sk/catalog/post/phones.html,
> > > after setting a cookie through the Set-Cookie header field in the 302
> > > reply. This works fin with firefox.
>
> > > However, withurllib2and the following code snippet, it doesn't work
>
> > > --------
> > > import cookiejar
> > > importurllib2
>
> > > cookiejar = cookielib.LWPCookieJar()
> > > opener =urllib2.build_opener(urllib2.HTTPCookieProcessor(cookiejar))
> > > url = 'http://www.orange.sk/eshop/sk/portal/catalog.html?
> > > type=post&subtype=phone&null'
> > > req =urllib2.Request(url, None)
> > > s=opener.open(req)
> > > --------
>
> > > Traceback (most recent call last):
> > >   File "<stdin>", line 1, in <module>
> > >   File "/usr/lib/python2.5/urllib2.py", line 387, in open
> > >     response = meth(req, response)
> > >   File "/usr/lib/python2.5/urllib2.py", line 498, in http_response
> > >     'http', request, response, code, msg, hdrs)
> > >   File "/usr/lib/python2.5/urllib2.py", line 419, in error
> > >     result = self._call_chain(*args)
> > >   File "/usr/lib/python2.5/urllib2.py", line 360, in _call_chain
> > >     result = func(*args)
> > >   File "/usr/lib/python2.5/urllib2.py", line 582, in http_error_302
> > >     return self.parent.open(new)
> > >   File "/usr/lib/python2.5/urllib2.py", line 381, in open
> > >     response = self._open(req, data)
> > >   File "/usr/lib/python2.5/urllib2.py", line 399, in _open
> > >     '_open', req)
> > >   File "/usr/lib/python2.5/urllib2.py", line 360, in _call_chain
> > >     result = func(*args)
> > >   File "/usr/lib/python2.5/urllib2.py", line 1115, in https_open
> > >     return self.do_open(httplib.HTTPSConnection, req)
> > >   File "/usr/lib/python2.5/urllib2.py", line 1080, in do_open
> > >     r = h.getresponse()
> > >   File "/usr/lib/python2.5/httplib.py", line 928, in getresponse
> > >     response.begin()
> > >   File "/usr/lib/python2.5/httplib.py", line 385, in begin
> > >     version, status, reason = self._read_status()
> > >   File "/usr/lib/python2.5/httplib.py", line 349, in _read_status
> > >     raise BadStatusLine(line)
> > > httplib.BadStatusLine
>
> > > Trying the redirected url directly doesn't work either (trying with
> > > Firefox will give an HTML error page, as the cookie is not set yet,
> > > but trying withurllib2gives the same exception as previously,
> > > whereas it should return the HTML error page)
> > > This works correctly on other urls on this website (http(s)://www.orange.sk).
>
> > > Am I doing anything wrong or is this a bug inurllib2?
>
> > > -- ak
>
> > Actually, I was wrong on the last point, this does *not* work onhttps://www.orange.sk(butdoes onhttp://www.orange.sk). IMHO, this
> > means eitherurllib2or the server misimplemented HTTPS.
>
> > Here's some output with debuglevel=1 :
>
> > >>> opener.open(urllib2.Request('http://www.orange.sk/', None, headers))
>
> > reply: 'HTTP/1.1 200 OK\r\n'
> > header: Date: Mon, 19 Jan 2009 21:44:03 GMT
> > header: Server: Oracle-Application-Server-10g/10.1.3.1.0 Oracle-HTTP-
> > Server
> > header: Set-Cookie:
> > JSESSIONID=0a19055a30d630c427bda71d4e26a37ca604b9f590dc.e3eNaNiRah4Pe3aSch8 Sc3yOc40;
> > path=/web
> > header: Expires: Mon, 19 Jan 2009 21:44:13 GMT
> > header: Surrogate-Control: max-age="10"
> > header: Content-Type: text/html; charset=ISO-8859-2
> > header: X-Cache: MISS fromwww.orange.sk
> > header: Connection: close
> > header: Transfer-Encoding: chunked
> > <addinfourl at 137417292 whose fp = <socket._fileobject object at
> > 0x831348c>>
>
> > >>> opener.open(urllib2.Request('https://www.orange.sk/', None, headers))
>
> > reply: ''
> > Traceback (most recent call last):
> >   File "<stdin>", line 1, in <module>
> >   File "/usr/lib/python2.5/urllib2.py", line 381, in open
> >     response = self._open(req, data)
> >   File "/usr/lib/python2.5/urllib2.py", line 399, in _open
> >     '_open', req)
> >   File "/usr/lib/python2.5/urllib2.py", line 360, in _call_chain
> >     result = func(*args)
> >   File "/usr/lib/python2.5/urllib2.py", line 1115, in https_open
> >     return self.do_open(httplib.HTTPSConnection, req)
> >   File "/usr/lib/python2.5/urllib2.py", line 1080, in do_open
> >     r = h.getresponse()
> >   File "/usr/lib/python2.5/httplib.py", line 928, in getresponse
> >     response.begin()
> >   File "/usr/lib/python2.5/httplib.py", line 385, in begin
> >     version, status, reason = self._read_status()
> >   File "/usr/lib/python2.5/httplib.py", line 349, in _read_status
> >     raise BadStatusLine(line)
> > httplib.BadStatusLine
>
> > As you can see the reply from the server seems empty (which results in
> > the BadStatusLine exception)
>
> > Any help greatly appreciated.
>
> > -- ak
>
>




More information about the Python-list mailing list