Http 将文件上载到Google Docs Api获取错误504

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

我正在为谷歌文档开发一个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
  • 获取
    200 OK
    响应,下一个上传位置存储在
    location
    标题中
  • 位置
    标头发出PUT请求,标头
    内容类型
    在步骤1中设置为我所有的
    X-Upload-Content-Type
    ,标头
    内容范围
    设置为以下内容:
    字节0-524287/2097152
    和正文中的前512kb数据
  • 获取一个
    308 Resume complete
    响应,该响应在
    location
    标题中有下一个上传位置
  • 返回到3,直到上传所有字节,此时我将收到一个创建的
    201
    响应,该响应将包含描述我上传的文件的xml数据
  • 包括步骤3在内的所有内容都可以正常工作。就是在第4步,事情开始出错

    最让我困惑的一件事是,第4步中的响应没有包含
    位置
    标题。我想这意味着我应该将下一个请求发送到同一个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返回的,这两个链接应该有帮助: