私は、彼らはまた、供給サンプルCコードでかなり混乱と矛盾POSTインターフェース(SOAP 1とは反対に)上のtorrageのAPIのドキュメントを見つける:それはこのようなものになるだろう。 PHPの投稿のオンラインの例では、SOAPの例とCコードの例で、ファイルの内容を送信していないようです(上記の@ kenderの答えは送信していないのと同じです)。
Cのサンプル(彼らはあなたが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-BitTorrentは」HTTP_UPLOAD_CONTENT_TYPE
です。 st.st_size
は、すべてのファイルのデータを持つメモリバッファ内のバイト数です(Cサンプルはファイルからそのデータを読み取りますが、サイズを知っている限り、どのようにメモリに格納しても問題ありません)。 content_boundary
は、ファイルの内容には存在しない文字列です。として作成し、それぞれ%u
を乱数で置き換えます(ファイル内に存在しない2つの乱数にヒットするまで繰り返します)。
filebuf
は、ファイルの内容をバッファである
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;
を次のように最後に、(HTTPソケットを開き、他のヘッダを送信した後)、ポスト本体は、彼らが書きます。
ほとんどシャープでシンプルですが、私はこの問題は、まさにに関するドキュメントの不足があるので、十分な情報が、同じように難しいだろうurllib.urlopen
のためにそれらを構築するurlfetch.fetch
(の引数を構築する方法を動作するようにここにあります願っていますどのヘッダーやコンテンツ、どのようにコード化されている必要がありますか?そして、よく書かれていない情報は、ここで私が提示しているものからリバースエンジニアリングする必要があります。
また、urlfetchを使用してSOAPリクエストをハッキングすることもできます。カーソンの長年の彼の試み、難しさと成功のためのhereを参照してください。そして成功を祈る!
は、App Engineの中で何のファイルはありません、それをアプリエンジンで試してみることがあります、私はファイルを持って送信するためにメモリに私が持っているものを使用する必要があります。 – medecau
PHPの例では、multipart/form-dataリクエストを構築するPHP機能を使用しているため、サンプルで構築されたフォームエンコードされたリクエストはありません。 –