मैं सोच रहा था कि आप पाइथन अनुरोधों का उपयोग करके ऐसा कुछ कैसे अनुवाद करते हैं? Urllib2 में, आप एपीआई सेवा में तार पर भेजे जा रहे डेटा को मैन्युअल रूप से कुशलतापूर्वक उपयोग कर सकते हैं, लेकिन अनुरोधों का दावा है कि फ़ाइल अपलोड मल्टीपार्ट आसान है। हालांकि, अनुरोध लाइब्रेरी का उपयोग करके एक ही अनुरोध को भेजने का प्रयास करते समय, मुझे विश्वास है कि यह दो भागों में से प्रत्येक के लिए सामग्री-प्रकार में कुछ महत्वपूर्ण पैरामीटर निर्दिष्ट नहीं कर रहा है। क्या कोई इस मामले पर कुछ प्रकाश डाल सकता है। आपका अग्रिम में ही बहुत धन्यवाद!पायथन अनुरोध मल्टीपार्ट HTTP पोस्ट
def upload_creative(self, account_id, file_path):
""""""
boundary = '-----------------------------' + str(int(random.random()*1e10))
parts = []
# Set account ID part.
parts.append('--' + boundary)
parts.append('Content-Disposition: form-data; name="account_id"')
parts.append('')
parts.append(str(account_id))
# Set creative contents part.
parts.append('--' + boundary)
parts.append('Content-Disposition: form-data; name="userfile"; filename="%s"' % file_path)
parts.append('Content-Type: %s' % mimetypes.guess_type(file_path)[0] or 'application/octet-stream')
parts.append('')
# TODO: catch errors with opening file.
parts.append(open(file_path, 'r').read())
parts.append('--' + boundary + '--')
parts.append('')
body = '\r\n'.join(parts)
headers = {'content-type': 'multipart/form-data; boundary=' + boundary}
url = self._resolve_url('/a/creative/uploadcreative')
req = urllib2.Request(url, headers=headers, data=body)
res = urllib2.urlopen(req)
return json.loads(res.read())
जब मैं यूआई से फायरबग की जांच करता हूं, तो मुझे POST स्रोत में निम्न मिलता है।
-----------------------------662549079759661058833120391
Content-Disposition: form-data; name="userfile"; filename="IMG_1377.jpg" Content-Type: image/jpeg
ÿØÿáÃExif��MM�*���� �������ª���� ���°���������������������º�������Â(�������1�������Ê2�������Ú<�������î�������i�������þ%������p��Apple�iPhone 4���H������H�����QuickTime 7.7.1�2012:08:17 11:47:11�Mac OS X 10.7.4�������������� "�������'�����P�������0220������(������<������ �����P������X������� ����� �� ������`������h �����0100 ������� ������ ������¢�������¤��������¤��������¤��������¤ ����������������������2011:10:01 17:19:23�2011:10:01 17:19:23���4��Á��¹��¡���M���Ç»¸������N����������Ê�����W����������â�������ú�����M�����������������!�����S���d����������T�����ÿ���d���������������������Ú����%Á��r��������������t������|(�������������������7������������H������H�����ÿØÿà�JFIF��H�H��ÿþ�AppleMark ÿÛ�� % #!,!#'(***.1-)1%)*((((((((((((((((((((((((((((((((((((((((((((((((((((ÿÄ¢���������� ������� ���}�!1AQa"q2¡#B±ÁRÑð$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖ×ØÙÚáâãäåæçèéêñòóôõö÷øùú��w�!1AQaq"2B¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz¢£¤¥¦§¨©ª²³´µ¶·¸¹ð.¥ÛWíÇLòV³FcaoæÂÒ8§É¸(è3E¢"Ú×S^+yj�!òû0Oüµn- yè){[oÝ/¸?ÃÔMY¡ÃgÔò4êò4n͸í¶={ÔM¤¸m¯K&ñæ«,©ù»zTÝ=öØô×6¶Ö:MÑi�,Û$Oö[ª÷ª©ÆiîỤJAxj>ÞAõúu¥}lIf÷û^Â)#´y^)Ô"/·v>n~4ººµ¬æ}FURì·Î 3¿Ãèh»ÐµÈÿ�·|Gu:ß²<ëlWäG·^+¡Ó¼gâ.-Þè|ϸ*ª® }é?Ú=(i:2½Ïg!ʵÑi¤¼eþ!÷³ÍC'æCqv®ÖÊÕiçCë·øsQy#K_B´þ0s'¦|¿Þ²lò¼?½ÿ�]rZ¶¨ø·6ñÆØ·mvV;þÿ�þ=ôª¿»r\zPñtHö÷>Ù¤R#+ Á òBôR;ú²¾)!àËn<.ÁÔlÏcRäÂ&§eX´fTóLžQßt§Zµ{â t·pK]ÈL1²îýúEüxþ÷j\î×-jÏÂ>!û:^,E,>^ýêßwû+Ópæ»?i÷û5kéá¹^ 6Ddq°öÁ¯Rù¨¦yãjòÿÙ
-----------------------------662549079759661058833120391
Content-Disposition: form-data; name="account_id"
69574
-----------------------------662549079759661058833120391--
फ़ायरबग में हेडर इस प्रकार हैं:
Request Headersview source
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding gzip, deflate
Accept-Language en-us,en;q=0.5
Cache-Control no-cache
Connection keep-alive
Content-Length 1713991
Content-Type multipart/form-data; boundary=---------------------------662549079759661058833120391
Cookie instance_defaults=%7C%20%7Cen_US; access_token=75c48e
Host ui.host.com
Pragma no-cache
Referer http://ui.host.com/
User-Agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:14.0) Gecko/20100101 Firefox/14.0.1
मुझे लगता है कि मेरे सवाल है वहाँ डेटा को समायोजित करने के लिए अनुरोध पुस्तकालय के माध्यम से किसी भी तरह से है ताकि:
Content-Disposition: form-data; name="userfile"; filename="IMG_1377.jpg" Content-Type: image/jpeg
और
Content-Disposition: form-data; name="account_id"
69574
sta तम्बू दोनों मौजूद हैं। मुझे लगता है कि मैं की तरह है फ़ाइलों
files = {'file': open('image.jpg', 'rb'), 'account_id': 12345}
का एक शब्दकोश हो सकता है लेकिन किसी भी तरह इन भागों में से प्रत्येक की सामग्री-विन्यास मेटाडाटा को संपादित अलग
क्या आप 'requests' साथ प्रयास किया? –
मैं multipart फ़ाइल अपलोड POST अनुरोध के प्रत्येक भाग के सामग्री-विस्थापन मेटाडेटा को संपादित करने का प्रयास कर रहा हूं। उदाहरण के लिए मेरे संपादन में, मुझे नाम = "userfile" होना चाहिए; फ़ाइल नाम = "IMG_1377.jpg" सामग्री-प्रकार: छवि/जेपीईजी छवि फ़ाइल है, और उसके बाद दूसरे भाग के लिए, मुझे सामग्री-विस्थापन: फॉर्म-डेटा; नाम = "खाता_आईडी" मुझे उम्मीद है कि इस सवाल पर कुछ स्पष्टता आती है। कृपया मुझे बताएं कि अगर ऐसा कुछ पाइथन-अनुरोध लाइब्रेरी के साथ संभव है। बहुत बहुत धन्यवाद –
user1698138