Http 将文件上载到Google Docs Api获取错误504
我正在为谷歌文档开发一个DelphiAPI,很难让上传正常工作。我遵循谷歌的发展指南,据我所知,这个过程应该是这样的:Http 将文件上载到Google Docs Api获取错误504,http,google-docs,google-docs-api,Http,Google Docs,Google Docs Api,我正在为谷歌文档开发一个DelphiAPI,很难让上传正常工作。我遵循谷歌的发展指南,据我所知,这个过程应该是这样的: 向此url发出POST请求:https://docs.google.com/feeds/upload/create-session/default/private/full/?access_token=my_access_token&v=3&convert=false带有以下标题:X-Upload-Content-Type和X-Upload-Content-Length 获取2
https://docs.google.com/feeds/upload/create-session/default/private/full/?access_token=my_access_token&v=3&convert=false
带有以下标题:X-Upload-Content-Type
和X-Upload-Content-Length
200 OK
响应,下一个上传位置存储在location
标题中位置
标头发出PUT请求,标头内容类型
在步骤1中设置为我所有的X-Upload-Content-Type
,标头内容范围
设置为以下内容:字节0-524287/2097152
和正文中的前512kb数据308 Resume complete
响应,该响应在location
标题中有下一个上传位置201
响应,该响应将包含描述我上传的文件的xml数据位置
标题。我想这意味着我应该将下一个请求发送到同一个url,但这会导致出现504错误。我用fiddler尝试了整个过程,只是想看看是delphi代码,还是我自己缺乏理解,还是google在做什么
以下是我使用fiddler发送和接收的请求和响应:
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数据,而是有一个
位置头,指向您可以从中获取XML数据的位置。这不是一个大问题,但有点令人困惑。看起来504错误是由Fiddler返回的,这两个链接应该有帮助: