我正试图使用他们的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无效。
提前致谢
答案 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)