私は Google ドキュメント用の Delphi API に取り組んでおり、アップロードを機能させるのに苦労しています。私はここでGoogleの開発ガイドに従っています。私が理解していることから、プロセスは次のようになるはずです。
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
- ヘッダー
200 OK
に保存された次のアップロード場所で応答を取得しますLocation
- ヘッダーをステップ 1 で設定したものに設定し、ヘッダーを次のように設定して、
Location
ヘッダーにPUT 要求を作成します。Content-Type
X-Upload-Content-Type
Content-Range
bytes 0-524287/2097152
- ヘッダー
308 Resume Incomplete
に次のアップロード場所がある応答を取得しますLocation
- すべてのバイトがアップロードされるまで 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 データは含まれず、代わりに、Location
XML データを取得できる場所を指すヘッダーが含まれます。大したことではありませんが、少し混乱します。