私は 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-TypeX-Upload-Content-TypeContent-Rangebytes 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 データは含まれず、代わりに、LocationXML データを取得できる場所を指すヘッダーが含まれます。大したことではありませんが、少し混乱します。