使用标准库在Python中进行身份验证

时间:2011-02-10 14:26:02

标签: python authentication curl

我正在尝试创建等效于

的Python

curl -u username:password http://policeapi2.rkh.co.uk/api/forces

如此处所述http://www.police.uk/api/docs/authentication/

我已通过浏览器手动登录并使身份验证正常工作

我首先尝试了基本身份验证:

voidspace.org.uk/python/articles/authentication.shtml

失败
This page isn't protected by authentication.
But we failed for another reason.

然后我试图通过改编这个stackoverflow.com/questions/1990976/convert-a-curl-post-request-to-python-only-using-standard-libary

import urllib2

def basic_authorization(user, password):
    s = user + ":" + password
    return "Basic " + s.encode("base64").rstrip()

req = urllib2.Request("http://policeapi2.rkh.co.uk/api/forces",
                headers = {
     "Authorization": basic_authorization("username", "password"),
    })

f = urllib2.urlopen(req)

print f.read()

并获得:

URLError: <urlopen error [Errno 10061] No connection could be made because the target machine actively refused it>

我在stackoverflow.com/questions/2407126/python-urllib2-basic-auth-problem上看到了这一点:

'问题可能是每个HTTP-Standard的Python库首先发送一个未经身份验证的请求,然后只有当它通过401重试回答时才会发送正确的凭据。如果Foursquare服务器不进行“完全标准的身份验证”,那么这些库将不起作用。'

链接回“此页面未受身份验证保护”。基本身份验证错误。

我使用了他们的代码:

import urllib2, base64

request = urllib2.Request("http://api.foursquare.com/v1/user")
base64string = base64.encodestring('%s:%s' % (username, password)).replace('\n', '')
request.add_header("Authorization", "Basic %s" % base64string)   
result = urllib2.urlopen(request)'

但仍然出错:

URLError: <urlopen error [Errno 10061] No connection could be made because the target machine actively refused it>

我不确定下一步该尝试什么。我是Python新编程并使用Curl的新手,我不知道是否我的基础知识错误或者出现了更复杂的问题。

感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:0)

  

我已通过浏览器手动登录并使身份验证正常工作

你是怎么做到的?

您是否使用FireBug或其他工具观察实际发生的情况?

在阅读太多StackOverflow答案之前,您应该研究一下有效的方法。