2016-12-28 135 views
1

我试图从thetvdb.com访问API v2(https://api.thetvdb.com)。不幸的是,我总是得到403错误。Python请求。错误403

以下是我有:

#!/usr/bin/python3 
import requests 

url = "https://api.thetvdb.com/login" 
headers = {'content-type': 'application/json'} 
payload = {"apikey":"123","username":"secretusername","userkey":"123"} 
post = requests.post(url, data = payload, headers = headers) 
print(post.status_code, post.reason) 

根据API文档,我为了得到令牌进行身份验证。但我只得到403禁止。

现在,我想它使用curl:

curl -X POST --header 'Content-Type: application/json' --header 'Accept: 
application/json' -d 
{"apikey":"123","username":"secretusername","userkey":"123"}' 
'https://api.thetvdb.com/login' 

这完美地工作。任何人都可以解释我缺少的东西吗?这让我疯狂。

我也

post = requests.post(url, data = json.dumps(payload), headers = headers) 

同样的错误尝试。

+0

尝试用“http:// requestb.in”URL替换url并执行python和curl请求。然后在浏览器中,你可以看到你的请求有什么不同,这里是你如何使用'https:// exotel.in/blog/engineering/debugging-your-exotel-webhooks-more-efficient-using-requestbin /' –

回答

0

您必须explicitly将​​转换为json字符串并通过为data。它看起来像你那样做,你也可以尝试设置用户代理为curl/7.47.1

headers = {'content-type': 'application/json', 'User-Agent': 'curl/7.47.1'} 
post = requests.post(url, data = json.dumps(payload), headers = headers) 

程序看起来像

#!/usr/bin/python3 
import requests 
import json  

url = "https://api.thetvdb.com/login" 
headers = {'content-type': 'application/json', 'User-Agent': 'curl/7.47.1'} 
payload = {"apikey":"123","username":"secretusername","userkey":"123"} 
post = requests.post(url, data = json.dumps(payload), headers = headers) 
print(post.status_code, post.reason) 
+0

OP提到他已经试过这个 – Andersson

+0

@Andersson如果curl正在工作,这必须工作。只有可能的检查服务器可能会做的是它可能会检查“UserAgent” –

+1

工作。感谢@Sarathsp和requestb.in,我发现Python和Curl唯一的区别是User-Agent。我改变它卷曲,它的工作。 – zappendappen

0

我认为你需要通过接受在Python请求头。像这样的东西 header = { 'Accept' : 'application/json', 'Content-Type' : 'application/json' "Accept-Encoding": "gzip, deflate, sdch, br", "Accept-Language": "en-US,en;q=0.8", "User-Agent": "some user-agent", }

相关问题