0

私は Google ドキュメント用の Delphi API に取り組んでおり、アップロードを機能させるのに苦労しています。私はここでGoogleの開発ガイドに従っています。私が理解していることから、プロセスは次のようになるはずです。

  1. https://docs.google.com/feeds/upload/create-session/default/private/full/?access_token=my_access_token&v=3&convert=false次のヘッダーを使用しX-Upload-Content-Typeて、この URL に POST リクエストを送信します。X-Upload-Content-Length
  2. ヘッダー200 OKに保存された次のアップロード場所で応答を取得しますLocation
  3. ヘッダーをステップ 1 で設定したものに設定し、ヘッダーを次のように設定して、LocationヘッダーにPUT 要求を作成します。Content-TypeX-Upload-Content-TypeContent-Rangebytes 0-524287/2097152
  4. ヘッダー308 Resume Incompleteに次のアップロード場所がある応答を取得しますLocation
  5. すべてのバイトがアップロードされるまで 3 に戻ります。アップロードした時点で、201 Createdアップロードしたファイルを説明する xml データを含む応答を受け取ります。

ステップ3までのすべてが正常に機能します。事態が悪化し始めるのはステップ 4 です。

最も混乱しているのは、ステップ 4 の応答にLocationヘッダーが含まれていないことです。これは、次のリクエストを同じ URL に送信する必要があることを意味すると考えましたが、504 エラーが発生します。それがデルファイコードなのか、私の側の理解不足なのか、それともグーグルがやっているのかを確認するためだけに、フィドラーでプロセス全体を試しました。

フィドラーを使用して送受信したリクエストとレスポンスは次のとおりです。

POST https://docs.google.com/feeds/upload/create-session/default/private/full/?access_token=my_access_token&v=3&convert=false HTTP/1.1
Content-Type: application/x-www-form-urlencoded
X-Upload-Content-Type: application/octet-stream
X-Upload-Content-Length: 2097152
Content-Length: 0
Host: docs.google.com

HTTP/1.1 200 OK
Server: HTTP Upload Server Built on May 16 2012 12:03:24 (1337195004)
Location: https://docs.google.com/feeds/upload/create-session/default/private/full/?access_token=my_access_token&v=3&convert=false&upload_id=AEnB2Ur9-9VxMSI6kaFzbybY2qiyzK6kVoKzcZ6Yo02H8Ni4FlQFl_N06DdjZXzp3vSjOPH3CEb_4vDlKZp7VlC0hxpkypzlKg
Date: Tue, 22 May 2012 16:53:27 GMT
Pragma: no-cache
Expires: Fri, 01 Jan 1990 00:00:00 GMT
Cache-Control: no-cache, no-store, must-revalidate
Content-Length: 0
Content-Type: text/html

PUT https://docs.google.com/feeds/upload/create-session/default/private/full/?access_token=my_access_token&v=3&convert=false&upload_id=AEnB2Ur9-9VxMSI6kaFzbybY2qiyzK6kVoKzcZ6Yo02H8Ni4FlQFl_N06DdjZXzp3vSjOPH3CEb_4vDlKZp7VlC0hxpkypzlKg HTTP/1.1
Content-Type: application/octet-stream
Content-Length: 524288
Content-Range: bytes 0-524287/2097152
Host: docs.google.com
[first 512kb of data here]

HTTP/1.1 308 Resume Incomplete
Server: HTTP Upload Server Built on May 16 2012 12:03:24 (1337195004)
Range: bytes=0-524287
X-Range-MD5: bd9d4ee7afa24b7da0e685f05b5f1f44
Date: Tue, 22 May 2012 16:54:29 GMT
Pragma: no-cache
Expires: Fri, 01 Jan 1990 00:00:00 GMT
Cache-Control: no-cache, no-store, must-revalidate
Content-Length: 0
Content-Type: text/html

PUT https://docs.google.com/feeds/upload/create-session/default/private/full/?access_token=my_access_token&v=3&convert=false&upload_id=AEnB2Ur9-9VxMSI6kaFzbybY2qiyzK6kVoKzcZ6Yo02H8Ni4FlQFl_N06DdjZXzp3vSjOPH3CEb_4vDlKZp7VlC0hxpkypzlKg HTTP/1.1
Content-Type: application/octet-stream
Content-Length: 524288
Content-Range: bytes 524288-1048575/2097152
Host: docs.google.com
[next 512kb of data]

HTTP/1.1 504 Fiddler - Send Failure
Content-Type: text/html; charset=UTF-8
Connection: close
Timestamp: 10:54:14.056

私ができた唯一のことは、間違っているのは Delphi コードだけではなく、Google ではないと思うので、私はドン起こっているべきことを理解していません。私は何が欠けていますか?

編集

私はアップロードを機能させることができました。私が別の方法で行ったことは完全にはわかりませんが、ドキュメントは少し誤解を招く可能性があります。少なくとも私にはそうです。PUT リクエストを送信しても、新しい場所は取得されません。同じ場所にアップロードし続けるだけです。また、アップロードが完了すると、201 応答には実際の XML データは含まれず、代わりに、LocationXML データを取得できる場所を指すヘッダーが含まれます。大したことではありませんが、少し混乱します。

4

1 に答える 1

2

Fiddler によって 504 エラーが返されたようです。次の 2 つのリンクが役立ちます。

http://urda.cc/blog/2010/09/28/iis-services-504s-and-fiddler/

http://urda.cc/blog/2010/09/30/follow-up-iis-services-504s-and-fiddler/

于 2012-05-22T18:17:48.887 に答える