2017-04-25 20 views
0

私はupload a fileに、Openload REST APIで '240p.mp4'と呼ばれることを試みています。Openload.co APIを使用してファイルをアップロードする方法

アップロードエンドポイントは、ファイルのSHA-1ハッシュを必要とするので、私が行って、それを得た:彼らは作ることをお勧め

url = "https://api.openload.co/1/file/ul?login={login}&key={key}&sha1={sha1}".format(
    login='YOUR_LOGIN', 
    key='YOUR_API_KEY', 
    sha1=sha1_hash, 
) 

p = { 
    'url': url, 
    'headers': { 
     'User-Agent': self.ua, 
    } 
} 
r = self.r.get(url=p['url'], headers=p['headers']) 
j = r.json() 

upload_link = j['result']['url'] 

:だから私は、アップロードリンクを要求し

sha1 = hashlib.sha1() 

BLOCKSIZE = 65536 
with open('240p.mp4', 'rb') as afile: 
    buf = afile.read(BLOCKSIZE) 
    while len(buf) > 0: 
     sha1.update(buf) 
     buf = afile.read(BLOCKSIZE) 

sha1_hash = sha1.hexdigest() 

CURLしかし、私はrequests男のよりよ^^

curl -F [email protected]/path/to/file.txt https://13abc37.example.com/ul/jAZUhVzeU78 

だから私はPOSTリクエストでそれを複製しようとした:

p = { 
    'url': upload_link, 
    'headers': { 
     'user-agent': self.ua, 
     'Content-Type': 'multipart/form-data; boundary="xxx"', 
    }, 
    'files': { 
     'file1': open('/scripts/wordpress/240p.mp4', "rb"), 
     # I've also tried this (and some others) 
     # 'file1': ('240.mp4', open('/scripts/wordpress/240p.mp4', "rb"), 'video/mp4') 
    } 
} 
r = self.r.post(url=p['url'], headers=p['headers'], files=p['files']) 

しかし、それは、このエラー応答を返します。理論的には

r.content¬ 
{ 
    "status": 500, 
    "msg": "failed to read: closed" 
} 

を、ステータス500エラーがサーバーからのエラーです。しかし、なぜ私はこのエラーが発生していますか?

N1:私はそれをしない場合はので、私は明示的に設定したboundary="xxx"。レスポンスは、それが欠落していることを返します。だから私はそれを設定した。

N2:ファイル/scripts/wordpress/240p.mp4のパスが正しいです。パーミッションも。

N3:私はリモートアップロード機能を認識してんだけど、私は(私が意味する地元から)バイナリファイルからアップロードする必要が

N4:かなり明白しかしself.rrequests.session()の割り当てです

+1

使用をhttps://github.com/mohan3d/PyOpenload – Dalvenjia

+0

私はそれを試しつもりです。ありがとう。それがうまくいくなら私はコードがどこで失敗しているかを調べるつもりです... – Jeflopo

答えて

0

私はそれがなぜ機能していないのか考え出しました。 requestscontent-typeヘッダーを処理するように問題を解決しました。 マルチパートフィールドの変数nameの値は無関係です。file1file_uploadなどと呼ぶことができます。

これは私のために働いている:

filepath = '/scripts/wordpress/240p.mp4' 

sha1 = hashlib.sha1() 

BLOCKSIZE = 65536 
with open(filepath, 'rb') as afile: 
    buf = afile.read(BLOCKSIZE) 
    while len(buf) > 0: 
     sha1.update(buf) 
     buf = afile.read(BLOCKSIZE) 

sha1_hash = sha1.hexdigest() 

url = "https://api.openload.co/1/file/ul?login={login}&key={key}&sha1={sha1}".format(
    login='YOUR_LOGIN', 
    key='YOUR_API_KEY', 
    sha1=sha1_hash, 
) 

p = { 
    'url': url, 
    'headers': { 
     'User-Agent': self.ua, 
    } 
} 
r = self.r.get(url=p['url'], headers=p['headers']) 
j = r.json() 

upload_link = j['result']['url'] 

p = { 
    'url': upload_link, 
    'headers': { 
     'user-agent': self.ua, 
    }, 
    'files': { 
     'file1': open(filepath, 'rb'), 
    } 
} 
r = self.r.post(url=p['url'], headers=p['headers'], files=p['files']) 
関連する問題