2017-08-31 56 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")