2017-08-31 54 views
1

我使用pyhton manage.py shell。当我送下面的代码:urllib.URLopener()。检索给我HTTP错误403

import requests 
import json 
import urllib 
import gzip 
import csv 
from usuario.models import Usuario 
from calculadora.models import Prazo 
r = requests.post("https://onesignal.com/api/v1/players/csv_export?app_id=*****", headers={"Authorization": "Basic *****"}) 
url = json.loads(r.content)["csv_file_url"] 
file = urllib.URLopener() 
file.retrieve(url, "C:\Users\legal\Desktop\file.gz") 
f = gzip.open("C:\\Users\\legal\\Desktop\\file.gz") 
arquivo = csv.reader(f) 

出现以下错误:

IOError: ('http error', 403, 'Forbidden', <httplib.HTTPMessage instance at 0x05551990>) 

但是,如果我先发:

import requests 
import json 
import urllib 
import gzip 
import csv 
from usuario.models import Usuario 
from calculadora.models import Prazo 
r = requests.post("https://onesignal.com/api/v1/players/csv_export?app_id=*****", headers={"Authorization": "Basic ******"}) 
url = json.loads(r.content)["csv_file_url"] 
file = urllib.URLopener() 

然后:

file.retrieve(url, "C:\Users\legal\Desktop\file.gz") 
f = gzip.open("C:\\Users\\legal\\Desktop\\file.gz") 
arquivo = csv.reader(f) 

代码运行机智没有任何错误,我不明白发生了什么事。

+0

检查,如果你的授权密钥是正确的。 403通常意味着服务器收到您的请求,但拒绝回复 – Qwerty

+0

是的,这是正确的,我已经检查过。代码运行,如果我发送一部分,但如果我立即发送,不起作用。我需要将代码放在“file = urlib.URLopener()”上。 – ffgg

回答

0

问题是同步的,我解决了这个使用:看到

f = urllib.URLopener() time.sleep(5) f.retrieve(url, "C:\Users\\legal\\Desktop\\file.gz")