Python Kodları
'PUT' method için yardım. - Baskı Önizleme

+- Python Kodları (http://qpython.club)
+-- Forum: Programlama Dilleri (http://qpython.club/forumdisplay.php?fid=3)
+--- Forum: Python (http://qpython.club/forumdisplay.php?fid=12)
+--- Konu Başlığı: 'PUT' method için yardım. (/showthread.php?tid=1401)

Sayfalar: 1 2


'PUT' method için yardım. - oktay811 - 01-06-2019

heroku.com

Bu siteyi kullanan var mı bilmiyorum, kısaca anlatayım;

Python,php,js, dillerinde yazdığınız webapp ları çalıştırmanızı sağlayan ücretsiz güzel bir site
Free olarak açtığınız hesapta size kullanmanız için düşük özellikte ama işe yarar bir makine veriyor, şimdiye kadar işlerimi hallettim ama bir sorun çıktı Smile

Şimdi bu makinede benim yapmak istediğim; internet ortamındaki bir dosyayı python ile başka bir yere yükleyeceğim, yani veriyi makinaya kayıt etmeden direk link üzerinden http-range ile okuyup okuyup başka bir siteye 'PUT' method ile upload etmeye çalışacağım.
Okuma kısımlarında sıkıntı olmuyor, sıkıntı yükleme kısmında, yani upload ettiğim siteye yüksek mb dosya yüklemeye çalıştığımda makine memory error hatası veriyor. PUT method yükleme yapınca bağlantıyı kesmeden dosyayı tek seferde yüklemek lazım heralde.

Python da PUT methodu kullanarak bağlantıyı kesmeden başka bir linkteki dosyayı 10 ar mb aralıklarla alıp buraya yazmanın bir yolu var mı?


RE: 'PUT' method için yardım. - excel - 01-06-2019

hangi makine "memory error" veriyor? yazdığın kodu da eklesen iyi olur. bir de madem dosyanın tamamını bi yerden diğerine aktaracaksın neden bağlantıyı kesip kesip her seferinde range isteği yolluyosun onu da anlamadım.


RE: 'PUT' method için yardım. - oktay811 - 01-06-2019

excel

Herkonun verdiği makina memory error veriyor, çünkü yüksek boyutlarda bir dosyayı okumaya çalıştığım için, memory e kayıt etmeye çalışıyor. Ama heroku sadece 500mb memory veriyor. Onun için 10 veya 100er mb sırasıyla okuyup put bağlantısına göndermem lazım.

Put bağlantısını başlatıp sonra download bağlantısından okuyup yükleyecek. "parts file transfering" diyebiliriz.

Normal biçimde ise örnek olarak, mesela dosyayı pc ye indirip yükleme yapıyoruz ya, ben o indirme kısmını direk es geçmek istiyorum.


RE: 'PUT' method için yardım. - excel - 01-06-2019

anladım. kodu görmeden diyebileceğim pek bişey yok, problem büyük ihtimalle senin kurduğun algoritmada. yoksa bi urlden bişey okuyup başka urle paslamak çocuk oyuncağı.
ve ilk postunda dediğin PUT method yükleme yapınca bağlantıyı kesmeden dosyayı tek seferde yüklemek lazım heralde kısmı doğru evet, bağlantıyı kapatıp yenisini açınca üzerine yazıyor, sonuna eklemiyor.


RE: 'PUT' method için yardım. - oktay811 - 01-06-2019

PHP Kod:
PUT http://example.com/uploadfile1234 HTTP/1.1
Hostexample.com
Connection
keep-alive
Content
-Length5
User
-AgentMozilla/5.0 (Windows NT 6.1Win64x64AppleWebKit/537.36 (KHTMLlike GeckoChrome/69.0.3497.100 Safari/537.36
Content
-Typetext/plain
Accept
application/jsontext/plain, */*
X-Object-Meta-File-Name: Dosyaismi
Referer: http://example.com
Accept-Encoding: gzip, deflate, br
Accept-Language: tr-TR,tr;q=0.9,en-US;q=0.8,en;q=0.7

<İnternet oratamından aldığım veri....>


HTTP/1.1 201 Created
Content-Length: 0
Access-Control-Expose-Headers: cache-control, content-language, content-type, expires, last-modified, pragma, etag, x-timestamp, x-trans-id
Last-Modified: Thu, 11 Apr 2019 20:08:53 GMT
Etag: d41d8cd98f00b204e9800998ecf8427e
Access-Control-Allow-Origin: http://example.com
Content-Type: text/html; charset=UTF-8
X-Trans-Id: txc546feae032e4bd98ec98-005caf9ed4
Date: Thu, 11 Apr 2019 20:08:52 GMT
Connection: keep-alive



------------------------------------------------------------------ 


Açıkçası şu anda kullandığım bir script yok, eskiside işe yaramadığı için sildim.

Yukarıdaki bağlantı modeli işlemi yapmak istediğim sitenin dosya yükleme şekli diyebilirim.
Buna uygun bir şekilde requests veya urllib2 ile nasıl bişey yapabilirim?


RE: 'PUT' method için yardım. - excel - 01-06-2019

valla ben başkasını bırak kendim için de nadiren kod yazıyorum o yüzden benden çok bişey bekleme oktay, örnek çalışan link versen shell scripti yazarım en fazla Big Grin download adresine ve bitane de upload adresine bağlantı açacak, birinden okuyup birine yazacaksın bu kadar basit. buffering (1MB okuyup 1MB yazmak mesela) yapınca zaten dosyanın boyutunun bi önemi yok, sunucudan range istemek için de bi sebep yok.


Cvp: 'PUT' method için yardım. - ahgonlum - 02-06-2019

heroku baya iyi bir site app engine den herokuya gectim free icin. Zaten sinir yoksa memory izin verdiği kadar dosya upload edersin . Büyük boyutlu dosyalarda sunucu olarak kullandigin app zaten bir kısıtlama getirir. Tahmin edebiliyorum hangi uygulamayi kullandığını. Dosya ismini zaten sen kendin belirliyorsun ona göre yuklersin 1.txt, 2.txt ... sonra download yaparsın sürekli üstüne yazıp. Free sistemlerden bir şey beklememek lazım . Yada bir kaç tane free hesap açıp hepsini ortak kullanabilirsin . Hepsi aynı anda partlari yükler .


RE: 'PUT' method için yardım. - oktay811 - 02-06-2019

ahgonlum

Şimdi şöyle;
Benim asıl yapmak istediğim dosyayı tek part halinde yüklemek, kastettiğin şeyi anladım fakat bu ondan farklı bir sistem.

Yinede yorum için teşekkür ederim hocam.


Cvp: 'PUT' method için yardım. - ahgonlum - 02-06-2019

Oluyorsa 500 mb hafıza dolunca bosaltirsin yine yüklemeye devam edersin hafızayı kullanarak. Memory error vermemesi için tabi dediğim teori gerçekte denemek lazim. Diyelim 1gb dosya yukleyeceksin 500'ü hafızaya alırsın onu yuklersin sonra hafızayı temizleyip tekrar yine 500 mb lik veriyi yine aynı şekilde yüklersin. Dosyayı yüklemek yerine websocketle aynı anda veriyi yazıp karşı taraftan indirebilirsin. Ama put ile direk verinin tamami yukleniyorsa yukledigin dosya boyutu kadar hafıza şart olabilir.


RE: 'PUT' method için yardım. - oktay811 - 02-06-2019

ahgonlum

Hah işte sıkıntı orada, put bağlantısını kesmeden bunu nasıl yapacağımı bilmiyorum.

requests.put(url, data=data)

Yada

opener = urllib2.build_opener(urllib2.HTTPHandler)
request = urllib2.Request(url, data=data)
request.get_method = lambda: 'PUT'
url = opener.open(request)


Bağlantıyı kesmeden veriyi sadece put metoduyla yüklemek için böyle yapılıyor, ama ben tek seferde yapamayacağım için sistemi nasıl kuracağımı bilemedim Sad