Python 3基本身份验证与pinnaclesports API

时间:2014-08-11 20:02:32

标签: api python-3.x basic-authentication

我正试图使用​​他们的API http://www.pinnaclesports.com/api-xml/manual

从pinnaclesports抓取python的投注线

需要基本身份验证(http://www.pinnaclesports.com/api-xml/manual#authentication):

  

验证

     

API使用HTTP基本访问身份验证。始终使用HTTPS进行访问   API。您需要发送HTTP Request标头,如下所示:

     

授权:基本

For example:
Authorization: Basic U03MyOT23YbzMDc6d3c3O1DQ1
import urllib.request, urllib.parse, urllib.error
import socket
import base64

url = 'https://api.pinnaclesports.com/v1//feed?sportid=12&leagueid=6164'
username = "abc"
password = "xyz"

base64 = "Basic: " + base64.b64encode('{}:{}'.format(username,password).encode('utf-8')).decode('ascii')
print (base64)

details = urllib.parse.urlencode({ 'Authorization' : base64 })
details = details.encode('UTF-8')
url = urllib.request.Request(url, details)
url.add_header("User-Agent","Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.29 Safari/525.13")    
responseData = urllib.request.urlopen(url).read().decode('utf8', 'ignore')
print (responseData)

不幸的是我收到了http 500错误。从我的观点来看,这意味着我的身份验证无法正常运行或其API无效。

提前致谢

1 个答案:

答案 0 :(得分:3)

实际上,我似乎没有使用您使用的Python版本,所以这还没有使用您的代码进行测试,但是在base64字符串中的“Basic”后面有一个无关的冒号。在我自己的代码中,在“Basic”之后添加此冒号确实会产生http 500错误。

编辑:使用Python 2.7和urllib2的代码示例:

import urllib2
import base64

def get_leagues():
    url = 'https://api.pinnaclesports.com/v1/leagues?sportid=33'
    username = "myusername"
    password = "mypassword"
    b64str = "Basic " + base64.b64encode('{}:{}'.format(username,password).encode('utf-8')).decode('ascii')
    headers = {'Content-length' : '0',
               'Content-type' : 'application/xml',
               'Authorization' : b64str}

    req = urllib2.Request(url, headers=headers)
    responseData = urllib2.urlopen(req).read()
    ofn = 'api_leagues.txt'
    with open(ofn, 'w') as ofile:
        ofile.write(responseData)