Coder Social home page Coder Social logo

requests-kerberos's Introduction

Requests

Requests is a simple, yet elegant, HTTP library.

>>> import requests
>>> r = requests.get('https://httpbin.org/basic-auth/user/pass', auth=('user', 'pass'))
>>> r.status_code
200
>>> r.headers['content-type']
'application/json; charset=utf8'
>>> r.encoding
'utf-8'
>>> r.text
'{"authenticated": true, ...'
>>> r.json()
{'authenticated': True, ...}

Requests allows you to send HTTP/1.1 requests extremely easily. There’s no need to manually add query strings to your URLs, or to form-encode your PUT & POST data — but nowadays, just use the json method!

Requests is one of the most downloaded Python packages today, pulling in around 30M downloads / week— according to GitHub, Requests is currently depended upon by 1,000,000+ repositories. You may certainly put your trust in this code.

Downloads Supported Versions Contributors

Installing Requests and Supported Versions

Requests is available on PyPI:

$ python -m pip install requests

Requests officially supports Python 3.8+.

Supported Features & Best–Practices

Requests is ready for the demands of building robust and reliable HTTP–speaking applications, for the needs of today.

  • Keep-Alive & Connection Pooling
  • International Domains and URLs
  • Sessions with Cookie Persistence
  • Browser-style TLS/SSL Verification
  • Basic & Digest Authentication
  • Familiar dict–like Cookies
  • Automatic Content Decompression and Decoding
  • Multi-part File Uploads
  • SOCKS Proxy Support
  • Connection Timeouts
  • Streaming Downloads
  • Automatic honoring of .netrc
  • Chunked HTTP Requests

API Reference and User Guide available on Read the Docs

Read the Docs

Cloning the repository

When cloning the Requests repository, you may need to add the -c fetch.fsck.badTimezone=ignore flag to avoid an error about a bad commit (see this issue for more background):

git clone -c fetch.fsck.badTimezone=ignore https://github.com/psf/requests.git

You can also apply this setting to your global Git config:

git config --global fetch.fsck.badTimezone ignore

Kenneth Reitz Python Software Foundation

requests-kerberos's People

Contributors

akitada avatar alexdutton avatar aowi avatar carsonyl avatar dpursehouse avatar edwardbetts avatar enzolis avatar frozencemetery avatar gentoo90 avatar geofft avatar henry0312 avatar jacobtolar avatar jborean93 avatar josecastroleon avatar lukasa avatar mkomitee avatar nitzmahone avatar razzzp avatar rriggs avatar sblcook avatar sergiuser1 avatar sigmavirus24 avatar ssbarnea avatar waldyrious avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

requests-kerberos's Issues

Mutual auth REQUIRED fails w/ persistent connection

When communicating with a Windows wsman endpoint using requests-kerberos, we should be able to set mutual auth to REQUIRED. However, the server stops sending auth responses on persistent connections after a successful exchange, which causes requests-kerberos to fail for mutual auth on subsequent responses (because the WWW-Authenticate response header is missing). If authentication is repeated on every request, the server will emit the proper headers in the response, but that behavior isn't currently implemented by requests-kerberos.

I'm not familiar enough with the various RFCs to be sure, but I think this behavior falls into a gray area that's not well documented.

I'm guessing one of two things should happen here:

  1. Mutual auth REQUIRED forces reauthentication on each request (sub-optimal for performance, probably more so in delegated cases). A fix for this could also probably easily address #65.

  2. Add stateful auth code to requests-kerberos that recognizes a successful auth exchange and won't try to validate mutual auth for implied-prior-auth responses on persistent connections. It'd still need to watch for 401s and reauthenticate accordingly (eg, proxies w/o Proxy-Support: Session-Based-Authentication), and it might need to be connection-aware to avoid a connection-hijacking attack via a compromised proxy (assuming requests surfaces what we'd need to know).

I can take a stab at implementing one of these behaviors, but I'm not sure which one is more correct. I'd lean toward 2) for performance, but implementing connection-aware behavior could be problematic. 1) should be more straightforward, but may have a performance penalty.

Tests

As with requests-ntlm, we need to work out how to test this functionality. This is kind of a huge pain in the neck, because ideally we'd want some kind of Kerberos-enabled server to bounce these requests off.

My ideal solution would be a single dyno (aka. free) Heroku app, but my suspicion is that it's probably a huge pain to sort that out, so we might need to do something else.

@sigmavirus24, thoughts?

Python kerberos library selection

With the pykerberos fork effectively going dark (see discussion at 02strich/pykerberos#27) and Apple's original ccs-pykerberos being apparently erstwhile maintained, I'm wondering what we can do to be on a supported Kerberos layer that's being actively maintained? pywinrm has a need to merge some specific IOV wrapping code that can only be implemented with low-level access to the C library and structures- we've got the code written, but Apple appears to have gone dark again (even if I could get the changes merged, I have no confidence that we could get any future bugfixes merged/released quickly). One option might be https://github.com/pythongssapi/python-gssapi - it uses Cython to provide access to both a high-level API and the underlying C API, so we could actually reimplement what we have in pure Python if this library were used. Biggest problem I can see there would be the Windows stuff that's mirroring the pykerberos library- we'd have to effectively split the implementation or write an interposer that would mimic the pykerberos API (since AFAIK there's no Windows equivalent available). We could also of course just make yet another fork of the original ccs-pykerberos...

We might (at least temporarily) take the gssapi approach with pywinrm and vendor a hacked requests-kerberos inside it, as that frees us from the reliance on third parties to get bugs fixed and released, but I'm curious if the requests team has any thoughts or different ideas about this problem in general?

Add optional support for WinKerberos

WinKerberos is a kerberos/pykerberos/kerberos-sspi work-alike for Windows SSPI with no dependencies (no need to install pywin32). It is actively maintained, responsive to bug reports, enhancement requests, and pull requests (though I haven't seen any PRs yet). It supports some features kerberos-sspi does not (the ability to authenticate as a different kerberos user than the process owner) and some features kerberos-sspi can not. it should be a drop in alternative.

Rename package

Just like ntlm this should be requests-kerberos not requests_kerberos. I can take care of this tonight

Default principal: `TypeError: argument 2 must be string, not None`

Python: 2.7.2
requests: 2.10.0
requests-kerberos: 0.9.0
kerberos: 1.2.4

...
  File "<>/common/runtime/session.py", line 38, in create
    auth=requests_kerberos.HTTPKerberosAuth())
  File "<>/requests/sessions.py", line 487, in get
    return self.request('GET', url, **kwargs)
  File "<>/requests/sessions.py", line 475, in request
    resp = self.send(prep, **send_kwargs)
  File "<>/requests/sessions.py", line 591, in send
    r = dispatch_hook('response', hooks, r, **kwargs)
  File "<>/requests/hooks.py", line 31, in dispatch_hook
    _hook_data = hook(hook_data, **kwargs)
  File "<>/requests_kerberos/kerberos_.py", line 281, in handle_response
    _r = self.handle_401(response, **kwargs)
  File "<>/requests_kerberos/kerberos_.py", line 189, in handle_401
    _r = self.authenticate_user(response, **kwargs)
  File "<>/requests_kerberos/kerberos_.py", line 164, in authenticate_user
    auth_header = self.generate_request_header(response, host)
  File "<>/requests_kerberos/kerberos_.py", line 122, in generate_request_header
    gssflags=gssflags, principal=self.principal)
TypeError: argument 2 must be string, not None

This appears to be related to the "Explicit Principal" change. I ran into it after replacing v0.8.0 with v0.9.0, and can reproduce the same behaviour in v0.10.0. Passing the principal explicitly to HTTPKerberosAuth's initialiser fixes the issue, as does (in v0.10.0) replacing kwargs['principal'] = self.principal on line 128 of kerberos_.py with pass.

Cut new release.

Gotta do the general tidying up needed for a new release: changelog etc.

Naming conflict (and other issues)

Using the following example code

import requests
from requests_kerberos import HTTPKerberosAuth
r = requests.get('https://employer.com/some.txt', auth=HTTPKerberosAuth())
print r.status_code

I get the error:

AttributeError: "'module' object has no attribute 'authGSSClientInit'"

I believe this is because the module contains a file named kerberos.py, which causes the wrong thing to happen when it calls import kerberos. Renaming kerberos.py to something else (and adjusting __init__.py accordingly) seems to fix it.

But then I see:

AttributeError: "'PreparedRequest' object has no attribute 'send'"

I'm pretty sure that's what #7 was meant to fix, so I tried using that branch. In that case, I get

NameError: "global name 'r' is not defined"

from the newly added line 68 (r.content), which makes sense because nothing is ever set for r.

I could be doing something incorrectly. I'd love to consult the documentation. :-)

Using the stock Python 2.7 included with OS X 10.8. The virtualenv has these packages:

  • kerberos==1.1.1
  • requests==1.1.0
  • requests-kerberos==0.1
  • wsgiref==0.1.2

Thanks.

handle_response infinite loop after run kdestory

requests (2.5.1)
requests-kerberos (0.6.1)

Here is a infinite loop if I run kdestory, should we show some warning message instead?

Traceback (most recent call last):
  File "/home/xulei/Develop/product-definition-center/example_client", line 41, in <module>
    pdc = pdc_client(url, insecure=True)
  File "/home/xulei/Develop/product-definition-center/example_client", line 33, in pdc_client
    token = getattr(pdc.auth, "obtain-token")()["token"]
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/beanbag/__init__.py", line 173, in __call__
    return self.__bbr.make_request(verb, self.__path, kwargs, body)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/beanbag/__init__.py", line 305, in make_request
    r = self.session.request(verb, path, params=params, data=ebody)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests/sessions.py", line 461, in request
    resp = self.send(prep, **send_kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests/sessions.py", line 579, in send
    r = dispatch_hook('response', hooks, r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests/hooks.py", line 41, in dispatch_hook
    _hook_data = hook(hook_data, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 250, in handle_response
    return self.handle_response(_r, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 248, in handle_response
    _r = self.handle_401(response, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 160, in handle_401
    _r = self.authenticate_user(response, **kwargs)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 135, in authenticate_user
    auth_header = self.generate_request_header(response)
  File "/home/xulei/.virtualenvs/pdc/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 115, in generate_request_header
    log.exception("generate_request_header(): authGSSClientStep() failed:")
  File "/usr/lib64/python2.7/logging/__init__.py", line 1182, in exception
    self.error(msg, *args, **kwargs)
  File "/usr/lib64/python2.7/logging/__init__.py", line 1175, in error
    self._log(ERROR, msg, args, **kwargs)
  File "/usr/lib64/python2.7/logging/__init__.py", line 1267, in _log
    record = self.makeRecord(self.name, level, fn, lno, msg, args, exc_info, func, extra)
  File "/usr/lib64/python2.7/logging/__init__.py", line 1241, in makeRecord
    rv = LogRecord(name, level, fn, lno, msg, args, exc_info, func)
  File "/usr/lib64/python2.7/logging/__init__.py", line 266, in __init__
    self.levelname = getLevelName(level)
  File "/usr/lib64/python2.7/logging/__init__.py", line 167, in getLevelName
    return _levelNames.get(level, ("Level %s" % level))
RuntimeError: maximum recursion depth exceeded while getting the str of an object

Please create a new release on pypi

On pypi requests-kerberos is still pulling in the "kerberos" package dependency which causes memory leaks.

The latest commit appears to depend on pykerberos which doesn't seem to suffer from that.

'KDC has no support for encryption type in 'generate_request_header'

Hello. I'm using this library to connect to a kerberized HttpFS service on Hadoop. It uses requests-kerberos for that purpose.

When connecting with accounts on the default realm, ( a Linux MIT Kerberos Server), the request goes smoothly. But when attempting the same but with accounts from an Active Directory server on another domain, i keep getting this error:

File "/usr/local/lib/python3.5/site-packages/requests_kerberos/kerberos_.py", line 144, in generate_request_header negotiate_resp_value) kerberos.GSSError: (('Unspecified GSS failure. Minor code may provide more information', 851968), ( 'KDC has no support for encryption type' , -1765328370))

My first guess was that requests_kerberos doesn't support AES-256 by default, and my HttpFS (WebHDFS) service is wanting to use the strongest encryption that is enabled both on the Kerberos Realm and the AD domain, which is AES256. I'm not so sure anymore.

Is anything apparent i'm missing?
TY

Streaming uploads causes stuck on resending a POST request

This issue happens when doing requests.post() with a file-like object. (Streaming Uploads)
After the server responds with a "401 Unauthorized", requests_kerberos.HTTPKerberosAuth.handle_response() gets called and it tries to resend the POST with "Authorization" header
but this gets stuck because the body data (a file-like object) is already consumed at the first attempt of sending the request and empty.

When the body is a file-like object, file object's position should be adjusted with seek().

compiler module not available in Python 3

2.6+ have the ast module instead. I don't know which versions you are targeting.

Tersely, you can write

import ast 
my_version = [x for x in ast.parse(open('requests_kerberos/__init__.py').read()).body 
              if isinstance(x, ast.Assign) and x.targets[0].id == '__version__'][0].value.s

Whitespace in base64 encoded responses & mutual authentication

In RFC 4648 which defines Base16, Base32, and Base64 encodings it says:

3.3. Interpretation of Non-Alphabet Characters in Encoded Data
Base encodings use a specific, reduced alphabet to encode binary data. Non-alphabet characters could exist within base-encoded data, caused by data corruption or by design. Non-alphabet characters may be exploited as a "covert channel", where non-protocol data can be sent for nefarious purposes. Non-alphabet characters might also be sent in order to exploit implementation errors leading to, e.g., buffer overflow attacks.
Implementations MUST reject the encoded data if it contains characters outside the base alphabet when interpreting base-encoded data, unless the specification referring to this document explicitly states otherwise. Such specifications may instead state, as MIME does, that characters outside the base encoding alphabet should simply be ignored when interpreting data ("be liberal in what you accept"). Note that this means that any adjacent carriage return/ line feed (CRLF) characters constitute "non-alphabet characters" and are ignored. Furthermore, such specifications MAY ignore the pad character, "=", treating it as non-alphabet data, if it is present before the end of the encoded data. If more than the allowed number of pad characters is found at the end of the string (e.g., a base 64 string terminated with "==="), the excess pad characters MAY also be ignored

Of particular interest is:

Implementations MUST reject the encoded data if it contains characters outside the base alphabet when interpreting base-encoded data, unless the specification referring to this document explicitly states otherwise.

Unfortunately, I cannot find any explicit reference to this RFC in any of the RFC's that are related to GSSAPI/Kerberos authentication. They all refer to an ephemeral idea of base64 encoding without any explicit reference to an implementation.

There are, however, some other RFC's which loosely define base64 encoding as well which explicitly state that whitespace should be ignored. Most notably of these is the RFC for MIME which is derived from the RFC for PEM.

Right now, the kerberos library we use handles the base64 decoding (why that is, I don't know) for us and will consider a token incorrect if it includes whitespace.

I have run into one server which was sending mutual authentication tokens which were not valid because of whitespace. I suspect this was a home-grown implementation of mutual authentication, so the implementation is suspect.

My reading of the relevant RFC's indicates that this is the correct thing to do, but I wanted to make sure everyone was aware of this and agreed before we decide that our implementation is acceptable.

FYI, urllib2_kerberos implements mutual authentication and also considers whitespace relevant and will cause mutual authentication failures if it runs into a token which includes it, but at work we have several perl based http clients which implement kerberos which didn't choke on the whitespace -- though I'm not familiar with them and it could be that they're not actually performing mutual authentication at all.

Add preemptive authentication

I'd like to use opportunistic authentication on the server end and simply check for WWW-Authenticate header presence. The main idea is to prevent the first HTTP request which will always return 401 and instead supply the Kerberos credentials immideately. At first glance it seems to be pretty easy to implement on the client side.

Docs

We need to document this functionality. Thankfully, this repository is small and has a fairly specific use-case, so the documentation shouldn't take long or be too long, but it still has to get done.

Refactor

When I look at the code I get a sadface. It's reasonably useful, but there's a lot in there that is unnecessarily brief (I'm looking at you, import kerberos as k). When we get tests in place, I want to start a refactor of the code to make it a lot clearer, especially for those who aren't as familiar with Kerberos as they ought to be (i.e. me).

This will make the code a lot more maintainable, which can only be a good thing.

For now this is an issue, but when we sort out #1 I'll branch off and turn this into a pull request, because that's The GitHub Way(tm).

Use of Kerberos 1.2.2 on Setup.Py (or requirements.txt rather)

Hello Folks,

I tested requests-kerberos with PyKerberos version 1.2.2 (recently provided by Apple) and it works with a minor change on the PyKerberos Side for use with python 3.

For me, PyKerberos 1.1.1 wont work as well (python 3.4, no 'commands' on import), but with 1.2.2 version it worked well.

Any change to remove the version requirement from the setup.py?

Cannot access website if the url contains the port

While accessing a protected site with kerberos authentication if the url contains a port it crashes in kerberos_.py:98 during the creation of the kerberos token.

This is because when calculating the host it gets also the port attached in kerberos_.py:95 and in kerberos_.py:223

host = urlparse(response.url).netloc

for a url 'http://www.example.com:8080/site' it returns as host 'www.example.com:8080'
if you replace netloc by hostname you obtain the desired behaviour discarding ports

host = urlparse(response.url).hostname

TypeError: __call__() missing 1 required positional argument: 'request'

I am recieving the error in the above when using the following. If I remove optional I receive the MutualAuthenticationError: Unable to authenticate <Response [302]> Any help appreciated.

import requests
from requests_kerberos import HTTPKerberosAuth, OPTIONAL

kerberos_auth = HTTPKerberosAuth(mutual_authentication=OPTIONAL)

proxies = {'http': 'http://proxy.company.org:8080',
       'https': 'http://proxy.company.org:8080',}

#url =  'https://www.quandl.com/api/v3/datasets/WIKI/AAPL.json?collapse=daily?exclude_column_names=true'

url =  'https://www.quandl.com/api/v3/databases/CLSM/data?api_key=<You will need a key from quandl>' 

response = requests.get(url, proxies=proxies, verify='cert.pem', auth=kerberos_auth()) # what do I need to pass to the request param as the error denotes a missing positional param

Can’t connect to server via non-canonical hostname

I am trying to connect to a virtual host by way of a CNAME. The server’s reverse DNS does not resolve to the CNAME. I have created specific service princs for the CNAME and configured the server to use them.

When I connect to the server with curl, it works:

curl --negotiate --user : https://foo.example.com

If I check klist after doing so, I see [email protected]/EXAMPLE.COM.

When I connect with requests using this library, it does not work. The server keeps returning a 401. When I check klist after doing so, I don’t see the correct service princ. Instead, I see the service princ with the canonical hostname (as returned from reverse DNS).

It seems like this issue, but I’ve tried changing my client’s krb5.conf to include rdns = false and also dns_canonicalize_hostname = false (which I found by looking at the krb5 source code). Regardless, i’m mystified that curl (and also Safari) are able to successfully negotiate this connection no matter what rdns and dns_canonicalize_hostname are set to.

Can't get authorization

We're getting lost here, and I'm not sure where we are going wrong. Ideas please?

>>> url = 'https://www.example.org'
>>> my_headers = {'Content-Type': 'application/json'}
>>> 
>>> requests.get(url, auth=HTTPKerberosAuth(mutual_authentication=OPTIONAL,service="HTTP"), headers=my_headers, verify=False)

/usr/local/lib/python2.7/site-packages/requests/packages/urllib3/connectionpool.py:730: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.org/en/latest/security.html (This warning will only appear once by default.)
  InsecureRequestWarning)
Traceback (most recent call last):
  File "", line 1, in 
  File "/usr/local/lib/python2.7/site-packages/requests/api.py", line 60, in get
    return request('get', url, **kwargs)
  File "/usr/local/lib/python2.7/site-packages/requests/api.py", line 49, in request
    return session.request(method=method, url=url, **kwargs)
  File "/usr/local/lib/python2.7/site-packages/requests/sessions.py", line 457, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/local/lib/python2.7/site-packages/requests/sessions.py", line 575, in send
    r = dispatch_hook('response', hooks, r, **kwargs)
  File "/usr/local/lib/python2.7/site-packages/requests/hooks.py", line 41, in dispatch_hook
    _hook_data = hook(hook_data, **kwargs)
  File "/usr/local/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 252, in handle_response
    _r = self.handle_401(response, **kwargs)
  File "/usr/local/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 164, in handle_401
    _r.raise_for_status()
  File "/usr/local/lib/python2.7/site-packages/requests/models.py", line 825, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 401 Client Error: Authorization Required

We are using py-kerberos-1.1.1_5, requests-kerberos-0.6.1_1, and requests-2.4.3

Open a session or get machine kerberos token

I've used successfully the requests kerberos for authenticating my url. But for every url i construct i need to make another authentication, so my question is can i have a session for the program that is using the lib or can I somehow get machine kerberos token without having to authenticate every url?

error installing 1.2.2 (py2.7) from pypi tar.gz file

I'm having issues installing this on a Linux RedHat machine (Red Hat Enterprise Linux Server release 6.6 (Santiago)). Any help/suggestions would be appreciated.

My version of gcc is the following:
gcc --version
gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-11)
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

I have Python 2.7.10 (Anaconda 2.3.0 64-bit) installed.

Here is the error message I get from running pip install:

Downloading/unpacking http://XXXX/repo/request-kerberos/kerberos-1.2.2.tar.gz
Downloading kerberos-1.2.2.tar.gz
Downloading from URL http://XXXX/repo/request-kerberos/kerberos-1.2.2.tar.gz
Running setup.py (path:/tmp/pip-EmXm8a-build/setup.py) egg_info for package from http://XXXX/repo/request-kerberos/kerberos-1.2.2.tar.gz
running egg_info
creating pip-egg-info/kerberos.egg-info
writing pip-egg-info/kerberos.egg-info/PKG-INFO
writing top-level names to pip-egg-info/kerberos.egg-info/top_level.txt
writing dependency_links to pip-egg-info/kerberos.egg-info/dependency_links.txt
writing manifest file 'pip-egg-info/kerberos.egg-info/SOURCES.txt'
warning: manifest_maker: standard file '-c' not found

reading manifest file 'pip-egg-info/kerberos.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
writing manifest file 'pip-egg-info/kerberos.egg-info/SOURCES.txt'

Source in /tmp/pip-EmXm8a-build has version 1.2.2, which satisfies requirement kerberos==1.2.2 from http://XXXX/repo/request-kerberos/kerberos-1.2.2.tar.gz
Installing collected packages: kerberos
Running setup.py install for kerberos
Running command /opt/anaconda/2.1.0/bin/python -c "import setuptools, tokenize;file='/tmp/pip-EmXm8a-build/setup.py';exec(compile(getattr(tokenize, 'open', open)(file).read().replace('\r\n', '\n'), file, 'exec'))" install --record /tmp/pip-veTkaH-record/install-record.txt --single-version-externally-managed --compile
running install
running build
running build_ext
building 'kerberos' extension
creating build
creating build/temp.linux-x86_64-2.7
creating build/temp.linux-x86_64-2.7/src
gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/opt/anaconda/2.1.0/include/python2.7 -c src/base64.c -o build/temp.linux-x86_64-2.7/src/base64.o sh: krb5-config: command not found
gcc: sh:: No such file or directory
gcc: krb5-config:: No such file or directory
gcc: command: No such file or directory
gcc: not: No such file or directory
gcc: found: No such file or directory
error: command 'gcc' failed with exit status 1
Complete output from command /opt/anaconda/2.1.0/bin/python -c "import setuptools, tokenize;file='/tmp/pip-EmXm8a-build/setup.py';exec(compile(getattr(tokenize, 'open', open)(file).read().replace('\r\n', '\n'), file, 'exec'))" install --record /tmp/pip-veTkaH-record/install-record.txt --single-version-externally-managed --compile:
running install

running build

running build_ext

building 'kerberos' extension

creating build

creating build/temp.linux-x86_64-2.7

creating build/temp.linux-x86_64-2.7/src

gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/opt/anaconda/2.1.0/include/python2.7 -c src/base64.c -o build/temp.linux-x86_64-2.7/src/base64.o sh: krb5-config: command not found

gcc: sh:: No such file or directory

gcc: krb5-config:: No such file or directory

gcc: command: No such file or directory

gcc: not: No such file or directory

gcc: found: No such file or directory

error: command 'gcc' failed with exit status 1


Cleaning up...
Removing temporary dir /tmp/pip_build_hdoopadm...
Command /opt/anaconda/2.1.0/bin/python -c "import setuptools, tokenize;file='/tmp/pip-EmXm8a-build/setup.py';exec(compile(getattr(tokenize, 'open', open)(file).read().replace('\r\n', '\n'), file, 'exec'))" install --record /tmp/pip-veTkaH-record/install-record.txt --single-version-externally-managed --compile failed with error code 1 in /tmp/pip-EmXm8a-build
Exception information:
Traceback (most recent call last):
File "/opt/anaconda/2.1.0/lib/python2.7/site-packages/pip/basecommand.py", line 122, in main
status = self.run(options, args)
File "/opt/anaconda/2.1.0/lib/python2.7/site-packages/pip/commands/install.py", line 283, in run
requirement_set.install(install_options, global_options, root=options.root_path)
File "/opt/anaconda/2.1.0/lib/python2.7/site-packages/pip/req.py", line 1435, in install
requirement.install(install_options, global_options, _args, *_kwargs)
File "/opt/anaconda/2.1.0/lib/python2.7/site-packages/pip/req.py", line 706, in install
cwd=self.source_dir, filter_stdout=self._filter_install, show_stdout=False)
File "/opt/anaconda/2.1.0/lib/python2.7/site-packages/pip/util.py", line 697, in call_subprocess
% (command_desc, proc.returncode, cwd))
InstallationError: Command /opt/anaconda/2.1.0/bin/python -c "import setuptools, tokenize;file='/tmp/pip-EmXm8a-build/setup.py';exec(compile(getattr(tokenize, 'open', open)(file).read().replace('\r\n', '\n'), file, 'exec'))" install --record /tmp/pip-veTkaH-record/install-record.txt --single-version-externally-managed --compile failed with error code 1 in /tmp/pip-EmXm8a-build

Issues with authenticated redirects to the same destination host

I've run into an issue w/ requests & requests_kerberos which I don't think we can fix without changes to requests.

We should not reuse an already established kerberos context on new requests. This means, if we're prompted for authentication, then receive a redirect, we shouldn't reuse the previously generated authorization header when following the redirect, even if the redirect is to the same hostname.

I can update our code to do the right thing (index HTTPKerberosAuth.context by response.url instead of response.host, and pop it off of self.context in authenticate_server.

What we can't do from here is change requests.Session.rebuild_auth to remove the Authorization header on a prepared request when following a redirect, even when the redirect is to the same hostname:

The code for rebuild_auth only has access to the prepared_request, the response, and the session. There's no way to check if the type of authentication object mandates the Authorization header be stripped or not:

 def rebuild_auth(self, prepared_request, response):
        """
        When being redirected we may want to strip authentication from the
        request to avoid leaking credentials. This method intelligently removes
        and reapplies authentication where possible to avoid credential loss.
        """
        headers = prepared_request.headers
        url = prepared_request.url

        if 'Authorization' in headers:
            # If we get redirected to a new host, we should strip out any
            # authentication headers.
            original_parsed = urlparse(response.request.url)
            redirect_parsed = urlparse(url)

            if (original_parsed.hostname != redirect_parsed.hostname):
                del headers['Authorization']

        # .netrc might have more auth for us on our new host.
        new_auth = get_netrc_auth(url) if self.trust_env else None
        if new_auth is not None:
            prepared_request.prepare_auth(new_auth)

        return

I looked through the hook documentation and it doesn't look like there's anywhere we can inject ourselves to modify the behavior. Do you have any ideas?

@sigmavirus24 @Lukasa I think I'll need your help on this one.

By the way, I think this is tangentially related to #54, and the reason @danc86 wasn't experiencing his problem with the "latest" requests at the time was because the latest requests happened to include the previous Authorization header on the redirected request. His suggestion to deregister the hook would have caused the latter responses from being mutually authenticated which would have solved his problem, but means he shouldn't trust that response (if he really wanted mutual authentication. If he didn't he could have just disabled it).

Maybe Session.rebuild_auth can delegate the responsibility for rebuilding the auth and manipulating headers (or not) to the authentication object if it's not from a built-in authentication mechanism ... but for that to work, we would need to be able to access the authentication object, which we can't if it's not on the session -- which it won't be for most of our users.

Import error

I am running a script which internally uses this library. I cannot find a way to install this dependency.
I am using Mac and trieid pip install kerberos_sspi but it again throws error
lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 4, in
import kerberos_sspi as kerberos
ImportError: No module named kerberos_sspi

Does requests-kerberos fully support GSS_S_CONTINUE NEEDED?

This is more a question about whether the object supports the GSS_S_CONTINUE_NEEDED status (and handles it correctly). I ask this because I have to be able to use Python objects that support this status (and handle it). The only alternative otherwise is using the 'gssapi' object and construct things myself.

Not providing mutual authentication

I noticed today that we're not actually authenticating the server responses. In handle_401 we call authenticate_user and return the resulting response to the caller, handle_response, which passes it back to the user. Under normal circumstances, we never call handle_other, which is where mutual authentication occurs.

I'm a bad person and I feel bad.

I have a fix in my fork, but I'm not submitting it yet because it breaks tests.

Install failed with GCC

I am attempting to do a pip install and I am getting a gcc error. I am running on redhat linux. Apparently gcc does not know that GSS_DLLIMP is defined and/or it is defined as empty.

In file included from src/kerberosbasic.h:18:0, from src/kerberos.c:19:
/usr/include/gssapi/gssapi_generic.h:50:12: error: expected '=', ',', ';', 'asm' or 'attribute' before 'extern'
GSS_DLLIMP extern gss_OID gss_nt_user_name;

I cannot figure out if this is a version of Kerberos (5), the krb5-devel package, or something else in the environment. Any suggestions would be appreciated.

GSSError: SSPI: InitializeSecurityContext: The specified target is unknown or unreachable

With 0.11.0 (requests == 2.14.2, winkerberos == 0.6.0):

I'm receiving the following issue when trying to connect to a REST API on Windows - it works on MacOS, so it seems to be a change in how Kerberos requests are handled on Windows.

Can anyone shed light on why generate_request_header() is failing on authGSSClientStep(), with GSSError: SSPI: InitializeSecurityContext: The specified target is unknown or unreachable?

Is the specified target the host I'm trying to connect to, or the KDC? Is there more detail I can have returned?

Unauthorized: Authorization denied - incorrect username or password.

In [3]: webapi = osisoftpy.webapi('https://dev.dstcontrols.com/piwebapi/', authtype=kerberos, verifyssl=False)
[kerberos_.py:188 handle_401() ] D handle_401(): Handling: 401
[kerberos_.py:146 generate_request_header() ] E generate_request_header(): authGSSClientStep() Failed:
Traceback (most recent call last):
  File "D:\venv\lib\site-packages\requests_kerberos\kerberos_.py", line 134, in generate_request_header negotiate_resp_ualue)
GSSError: SSPI: InitializeSecurityContext: The specified target is unknown or unreachable

[kerberos_.py:147 generate_request_header() ] E SSPI: InitializeSecurityContext: The specified target is unknown or unreachable
Traceback (most recent call last):
  File "D:\venv\lib\site-packages\requests_kerberos\kerberos_.py", line 134, in generate_request_header negotiate_resp_ualue)
GSSError: SSPI: InitializeSecurityContext: The specified target is unknown or unreachable

[kerberos_.py:191 handle_401() ] D handle_401(): returning <Response [401]>
[kerberos_.py:284 handle_response() ] D handle_response(): returning <Response [401]>
[kerberos_.py:285 handle_response() ] D handle_response() has seen 0 401 responses
[kerberos_.py:188 handle_401() ] D handle_401(): Handling: 401
[kerberos_.py:146 generate_request_header() ] E generate_request_header(): authGSSClientStep() Failed:
Traceback (most recent call last):
  File "D:\venv\lib\site-packages\requests_kerberos\kerberos_.py", line 134, in generate_request_header negotiate_resp_value)
GSSError: SSPI: InitializeSecurityContext: The specified target is unknown or unreachable

[kerberos_. :147 generate_request_header() ] E SSPI: InitializeSecurityContext: The specified target is unknown or unreachable
Traceback (most recent call last):
  File "D:\venv\lib\site-packages\requests_kerberos\kerberos_.py", 1ine 134, in generate_request_header negotiate_resp_value)
GSSError: SSPI: InitializeSecurityContext: The specified target is unknown or unreachable

[kerberos_.py:191 handle_401() ] D handle_401(): returning <Response [401]>
[kerberos_.py:284 handle_response() ] D handle_response(): returning <Response [401]>
[kerberos_.py:285 handle_response() ] D handle_response() has seen 1 401 responses
[kerberos_.py:291 handle_response() ] D handle_response(): returning 401 <Response [401]>
---------------------------------------------------------------------------
Unauthorized
Traceback (most recent call last)
<ipython-input-3-9446c733fd16>) in <module>()
----> 1 webapi = osisoftpy.webapi('https://dev.dstcontrols.com/piwebapi/', authtype='kerberos', verifyssl=False)

D:\venv\lib\site-packages\osisoftpy\api.pyc in webapi(url, authtype, username, password, verifyssl)
     66        r = APIResponse(s.get(url), s)
     67        if r.response.status_code == 401:
---> 68            raise Unauthorized('Authorization denied - incorrect username or password.')
     70        if r.response.status_code != 200:
     71            raise HTTPError('Wrong server response: %s %s' % (r.response.status_code, r.response.reason))

Unauthorized: Authorization denied - incorrect username or password.

In [4]: _

Mutual authentication unavailable on 403 response

OS: RHEL 7
Package version: python-kerberos.x86_64 1.1-15.el7

I have had great suggest using the get request and this project:

url = "http://" + HDFS_HOST + ":" + HDFS_PORT + "/webhdfs/v1" + hdfs_path + op 
resp = requests.get(url, auth=requests_kerberos.HTTPKerberosAuth())

However, I am struggling to make use of put with this authentication library. I absolutely have the rights to do even this simple test to my own /user directory on HDFS, and that has always worked with a python subprocess, but I cannot get this to work with this. I cannot specify the principal, as that doesn't seem supported under our environment.

2017-02-16 08:39:53,462 - ERROR - handle_other(): Mutual authentication unavailable on 403 response
2017-02-16 08:39:53,463 - ERROR - Unable to transfer file /home/mtdeguzis/testfile.txt to HDF

Log snippet (deidentified): https://gist.github.com/mdeguzis/af2b4b945b13e8f4ff57dc6979359157

Negotiate/SPNEGO and NTLM requires reusing the context

I encountered a server that will only work with Negotiate\SPNEGO since it doesn't really support Kerberos but only NTLM. But it does support Negotiate\SPNEGO that uses NTLM under the hood still allowing the use of Windows SSO.

But Negotiate\SPNEGO + NTLM doesn't work in requests_kerberos since NTLM involves multiple requests and requests_kerberos recreates the GSS context on the second request instead of reusing it.

This means that PR #89 will only work for servers that support SPNEGO and Kerberos.

The fix for this shouldn't be too diffcult and I have an idea of a quick way to fix this. But for this to have any effect we need PR #89 to be merged first of course.

compiled with Address Sanitizer?

I don't know whether this should be reported here - please let me know where to go if not.

When installing requests-kerberos (with pip in a Python 3.5.2 installation in macOS 10.12 Sierra), a file "kerberos.cpython-35m-darwin.so" gets installed (in my case in a venv: venv/lib/python3.5/site-packages/kerberos.cpython-35m-darwin.so).

This .so file seems to have been compiled using clang's Address Sanitizer, and triggers this error message:

==78358==ERROR: Interceptors are not working. This may be because AddressSanitizer is loaded too late (e.g. via dlopen). Please launch the executable with:
DYLD_INSERT_LIBRARIES=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/8.0.0/lib/darwin/libclang_rt.asan_osx_dynamic.dylib
==78358==AddressSanitizer CHECK failed: /Library/Caches/com.apple.xbs/Sources/clang_compiler_rt/clang-800.0.38/src/projects/compiler-rt/lib/sanitizer_common/sanitizer_mac.cc:690 "(("interceptors not installed" && 0)) != (0)" (0x0, 0x0)
    <empty stack>

Abort trap: 6

Now, I'm not 100% sure that it's requests-kerberos the guilty party here, but it is the only suspect. There are no more native files in my venv, and otool -lL kerberos.cpython-35m-darwin.so does show a smoking gun: it refers to dylib @rpath/libclang_rt.asan_osx_dynamic.dylib (compatibility version 0.0.0, current version 0.0.0), and has a load command like this:

Load command 17
          cmd LC_RPATH
      cmdsize 136
         path /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/8.0.0/lib/darwin (offset 12)

Can you please confirm whether I got it right?

And if so, when do you plan to get out a new version not compiled with the sanitizer? :)

(note, I have tried setting the DYLD_INSERT_LIBRARIES and it doesn't work)

incompatible with requests 1.1: mutual authentication fails because "Context is already fully established"

This is not an issue with the latest requests versions, but with requests 1.1 and mutual authentication not disabled, a valid request will fail:

requests_kerberos.exceptions.MutualAuthenticationError: Unable to authenticate <Response [302]>

But it's not really a failure in mutual authentication, the problem is that the server is being authenticated twice and the second time raises a GSSAPI failure:

DEBUG:requests_kerberos.kerberos_:handle_401(): Handling: 401
DEBUG:requests_kerberos.kerberos_:authenticate_user(): Authorization header: Negotiate [...]
DEBUG:requests_kerberos.kerberos_:handle_other(): Handling: 302
DEBUG:requests_kerberos.kerberos_:handle_other(): Authenticating the server
DEBUG:requests_kerberos.kerberos_:authenticate_server(): Authenticate header: YIGZB[...]
DEBUG:requests_kerberos.kerberos_:authenticate_server(): returning <Response [302]>
DEBUG:requests_kerberos.kerberos_:handle_other(): returning <Response [302]>
DEBUG:requests_kerberos.kerberos_:handle_response(): returning <Response [302]>
DEBUG:requests_kerberos.kerberos_:authenticate_user(): returning <Response [302]>
DEBUG:requests_kerberos.kerberos_:handle_401(): returning <Response [302]>
DEBUG:requests_kerberos.kerberos_:handle_response(): returning <Response [302]>
DEBUG:requests_kerberos.kerberos_:handle_response() has seen 0 401 responses
DEBUG:requests_kerberos.kerberos_:handle_other(): Handling: 302
DEBUG:requests_kerberos.kerberos_:handle_other(): Authenticating the server
DEBUG:requests_kerberos.kerberos_:authenticate_server(): Authenticate header: YIGZB[...]
ERROR:requests_kerberos.kerberos_:authenticate_server(): authGSSClientStep() failed:
Traceback (most recent call last):
  File "requests_kerberos/kerberos_.py", line 230, in authenticate_server
    _negotiate_value(response))
GSSError: (('Unspecified GSS failure.  Minor code may provide more information', 851968), ('Context is already fully established', 39756036))
ERROR:requests_kerberos.kerberos_:handle_other(): Mutual authentication failed
Traceback (most recent call last):
  File "asdf.py", line 8, in <module>
    auth=requests_kerberos.HTTPKerberosAuth(mutual_authentication=requests_kerberos.OPTIONAL))
  File "/usr/lib/python2.6/site-packages/requests/api.py", line 55, in get
    return request('get', url, **kwargs)
  File "/usr/lib/python2.6/site-packages/requests/api.py", line 44, in request
    return session.request(method=method, url=url, **kwargs)
  File "/usr/lib/python2.6/site-packages/requests/sessions.py", line 279, in request
    resp = self.send(prep, stream=stream, timeout=timeout, verify=verify, cert=cert, proxies=proxies)
  File "/usr/lib/python2.6/site-packages/requests/sessions.py", line 374, in send
    r = adapter.send(request, **kwargs)
  File "/usr/lib/python2.6/site-packages/requests/adapters.py", line 219, in send
    r = self.build_response(request, resp)
  File "/usr/lib/python2.6/site-packages/requests/adapters.py", line 113, in build_response
    response = dispatch_hook('response', req.hooks, response)
  File "/usr/lib/python2.6/site-packages/requests/hooks.py", line 39, in dispatch_hook
    _hook_data = hook(hook_data)
  File "requests_kerberos/kerberos_.py", line 259, in handle_response
    return self.handle_response(_r, num_401s=num_401s, **kwargs)
  File "requests_kerberos/kerberos_.py", line 266, in handle_response
    _r = self.handle_other(response)
  File "requests_kerberos/kerberos_.py", line 190, in handle_other
    "{0}".format(response))
requests_kerberos.exceptions.MutualAuthenticationError: Unable to authenticate <Response [302]>

Request using mutual auth returns 200 but raises MutualAuthenticationError

With 0.11.0 (requests == 2.14.1, pykerberos == 1.1.14):

requests.get('https://SERVER', verify=False, auth=HTTPKerberosAuth())

Raises:

Traceback (most recent call last):
  File "<ipython-input-39-a3f889e087c4>", line 1, in <module>
    requests.get('https://SERVER', verify=False, auth=HTTPKerberosAuth(mutual_authentication=1))
  File "/home/musttu/Code/virtualenvs/cosmos/lib/python3.4/site-packages/requests/api.py", line 72, in get
    return request('get', url, params=params, **kwargs)
  File "/home/musttu/Code/virtualenvs/cosmos/lib/python3.4/site-packages/requests/api.py", line 58, in request
    return session.request(method=method, url=url, **kwargs)
  File "/home/musttu/Code/virtualenvs/cosmos/lib/python3.4/site-packages/requests/sessions.py", line 518, in request
    resp = self.send(prep, **send_kwargs)
  File "/home/musttu/Code/virtualenvs/cosmos/lib/python3.4/site-packages/requests/sessions.py", line 646, in send
    r = dispatch_hook('response', hooks, r, **kwargs)
  File "/home/musttu/Code/virtualenvs/cosmos/lib/python3.4/site-packages/requests/hooks.py", line 31, in dispatch_hook
    _hook_data = hook(hook_data, **kwargs)
  File "/home/musttu/Code/virtualenvs/cosmos/lib/python3.4/site-packages/requests_kerberos/kerberos_.py", line 287, in handle_response
    return self.handle_response(_r, num_401s=num_401s, **kwargs)
  File "/home/musttu/Code/virtualenvs/cosmos/lib/python3.4/site-packages/requests_kerberos/kerberos_.py", line 294, in handle_response
    _r = self.handle_other(response)
  File "/home/musttu/Code/virtualenvs/cosmos/lib/python3.4/site-packages/requests_kerberos/kerberos_.py", line 217, in handle_other
    "{0}".format(response))
MutualAuthenticationError: Unable to authenticate <Response [200]>

That looks weird - the server returned 200 but it is reported as a failure?

I stepped some code, and response from the server is indeed correct (containing expected response body etc.).

Enabling logging gives:

ERROR:requests_kerberos.kerberos_:authenticate_server(): authGSSClientStep() failed:
Traceback (most recent call last):
  File "/home/musttu/Code/virtualenvs/cosmos/lib/python3.4/site-packages/requests_kerberos/kerberos_.py", line 258, in authenticate_server
    result = kerberos.authGSSClientStep(self.context[host],
kerberos.GSSError: (('Invalid token was supplied', 589824), ('Success', 100001))
ERROR:requests_kerberos.kerberos_:handle_other(): Mutual authentication failed

Setting force_preemptive=True makes no difference.

Setting mutual_authentication=DISABLE makes the call succeed... but shouldn't it work also with enabled?

The target server is Jenkins, if that matters.

Pinned to kerberos==1.1.1

Hi,

I cannot see a strong reason to pin to 1.1.1. This is causing issues, as I want to use a more recent version such as 1.1.5. Is this specific reason required?

Thanks

Pip install failure: popenargs not defined

I tried both

pip install requests-kerberos

and downloading master.zip and pip installing that way.

Both ways result in stderr Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-1gTsvg/pykerberos/

It also spits out a ton of stuff to stdout

Collecting https://pypi.python.org/packages/source/r/requests-kerberos/requests-kerberos-0.8.0.tar.gz
  Using cached requests-kerberos-0.8.0.tar.gz
Requirement already satisfied (use --upgrade to upgrade): requests>=1.1.0 in /usr/local/lib/python2.7/dist-packages (from requests-kerberos==0.8.0)
Collecting pykerberos<2.0.0,>=1.1.8 (from requests-kerberos==0.8.0)
  Using cached pykerberos-1.1.10.tar.gz
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-build-1gTsvg/pykerberos/setup.py", line 57, in <module>
        krb5_ver = check_krb5_version()
      File "/tmp/pip-build-1gTsvg/pykerberos/setup.py", line 50, in check_krb5_version
        if len(krb5_vers) == 4:
    TypeError: object of type 'NoneType' has no len()
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-build-1gTsvg/pykerberos/setup.py", line 57, in <module>
        krb5_ver = check_krb5_version()
      File "/tmp/pip-build-1gTsvg/pykerberos/setup.py", line 49, in check_krb5_version
        krb5_vers = check_krb5_config("--version")
      File "/tmp/pip-build-1gTsvg/pykerberos/setup.py", line 43, in check_krb5_config
        return check_krb5_config(*options, command_name="krb5-config.mit")
      .........lots of repeat........
              return check_krb5_config(*options, command_name="krb5-config.mit")
      File "/tmp/pip-build-1gTsvg/pykerberos/setup.py", line 43, in check_krb5_config
        return check_krb5_config(*options, command_name="krb5-config.mit")
      File "/tmp/pip-build-1gTsvg/pykerberos/setup.py", line 37, in check_krb5_config
        cmd = popenargs[0]
    NameError: global name 'popenargs' is not defined

    ----------------------------------------

Switch to kerberos instead of pykerberos

Distributions (openSUSE, Debian, Ubuntu, Fedora) already ship python-kerberos but nobody ships python-pykerberos . And both have the same kerberos.so so they are not installable in parallel.
Can you please switch to kerberos (from pypi) instead of using pykerberos? Looks anyway that pykerberos is just a fork of kerberos. Or am I missing something?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.