मैं बहुत भ्रामक और परस्पर विरोधी नमूना सी कोड वे भी आपूर्ति के साथ (के रूप में सोप एक के खिलाफ) पोस्ट इंटरफेस पर torrage के एपीआई दस्तावेज़ ढूंढने: यह कुछ इस तरह होगा। ऐसा लगता है कि PHP पोस्ट के उनके ऑनलाइन उदाहरण में वे फ़ाइल की सामग्री नहीं भेज रहे हैं (जैसे ऊपर @ केंडर का उत्तर इसे भेज नहीं रहा है) जबकि वे इसे एसओएपी उदाहरणों में भेज रहे हैं और उदाहरण सी कोड में भेज रहे हैं।
सी नमूना (कैसे वे हेडर कि आप urlfetch.fetch
को गुजर होगी गणना) के प्रासंगिक हिस्सा है:
snprintf(formdata_header, sizeof(formdata_header) - 1,
"Content-Disposition: form-data; name=\"torrent\"; filename=\"%s\"\n"
"Content-Type: " HTTP_UPLOAD_CONTENT_TYPE "\n"
"\n",
torrent_file);
http_content_len = 2 + strlen(content_boundary) + 1 + strlen(formdata_header) + st.st_size + 1 + 2 + strlen(content_boundary) + 3;
LTdebug("http content len %u\n", http_content_len);
snprintf(http_req, sizeof(http_req) - 1,
"POST /%s HTTP/1.1\n"
"Host: %s\n"
"User-Agent: libtorrage/" LTVERSION "\n"
"Connection: close\n"
"Content-Type: multipart/form-data; boundary=%s\n"
"Content-Length: %u\n"
"\n",
cache_uri, cache_host, content_boundary, http_content_len);
"अनुप्रयोग/x-बिटटोरेंट" HTTP_UPLOAD_CONTENT_TYPE
है। st.st_size
मेमोरी बफर में सभी फ़ाइल के डेटा के साथ बाइट्स की संख्या है (सी नमूना फ़ाइल से उस डेटा को पढ़ता है, लेकिन इससे कोई फ़र्क नहीं पड़ता कि आप इसे स्मृति में कैसे प्राप्त करते हैं, जब तक आप इसका आकार जानते हों)। content_boundary
एक स्ट्रिंग है जो फ़ाइल की सामग्री में मौजूद नहीं है, वे इसे के रूप में बनाते हैं, प्रत्येक %u
एक यादृच्छिक संख्या द्वारा प्रतिस्थापित किया जाता है (तब तक दोहराव संख्याओं पर उस स्ट्रिंग को हिट करता है जो फ़ाइल में मौजूद नहीं होता है)। अंत में, के बाद शरीर (HTTP सॉकेट खोलने और अन्य शीर्ष लेख भेजने के बाद) वे के रूप में लिखें इस प्रकार है:
if (write_error == 0) if (write(sock, "--", 2) <= 0) write_error = 1;
if (write_error == 0) if (write(sock, content_boundary, strlen(content_boundary)) <= 0) write_error = 1;
if (write_error == 0) if (write(sock, "\n", 1) <= 0) write_error = 1;
if (write_error == 0) if (write(sock, formdata_header, strlen(formdata_header)) <= 0) write_error = 1;
if (write_error == 0) if (write(sock, filebuf, st.st_size) <= 0) write_error = 1;
if (write_error == 0) if (write(sock, "\n--", 3) <= 0) write_error = 1;
if (write_error == 0) if (write(sock, content_boundary, strlen(content_boundary)) <= 0) write_error = 1;
if (write_error == 0) if (write(sock, "--\n", 3) <= 0) write_error = 1;
जहां filebuf
फ़ाइल की सामग्री के साथ बफर है।
शायद ही तेज और सरल, लेकिन मुझे उम्मीद है कि urlfetch.fetch
के लिए तर्क बनाने के लिए यहां काम करने के लिए पर्याप्त जानकारी है (urllib.urlopen
के लिए उन्हें बनाना उतना ही कठिन होगा, क्योंकि समस्या बिल्कुल दस्तावेज की कमी है क्या हेडर और किस सामग्री और आपको एन्कोड किए जाने की आवश्यकता है - और मुझे अच्छी तरह से प्रलेखित जानकारी को यहां जो प्रस्तुत कर रहा है उससे उलटा इंजीनियर होना चाहिए, मुझे लगता है)।
वैकल्पिक रूप से, urlfetch के माध्यम से एक SOAP अनुरोध को हैक करना संभव हो सकता है; कार्सन के मामले में उनके प्रयासों, कठिनाइयों और सफलता के लंबे पद के लिए here देखें। और शुभकामनाएं!
वहाँ App इंजन में कोई भी फ़ाइलें है, मैं स्मृति में उपयोग करने के लिए मैं क्या है भेजने के लिए एक फ़ाइल है की जरूरत है। – medecau
क्योंकि PHP उदाहरण कुछ PHP कार्यक्षमता का उपयोग करता है जो एक मल्टीपार्ट/फॉर्म-डेटा अनुरोध बनाता है, _not_ फॉर्म-एन्कोडेड अनुरोध जो आपका उदाहरण बनाता है। –