2015-12-01 13 views
5

Sto tentando di aggiungere una nuova cartella principale a un numero elevato di file Google Drive. Sto usando richieste batch per evitare di inviare troppe richieste, ma questo non funziona quando c'è più di una richiesta PATCH aggiunta al batch. Il server di Google restituisce una risposta all'errore HTTP 502 Bad Gateway. Cosa c'è di sbagliato o come posso risolvere questo?Perché la richiesta dell'API Drive ha esito negativo quando è presente più di una richiesta PATCH in un batch?

Generale:

Remote Address:216.58.196.138:443 
Request URL:https://content.googleapis.com/batch 
Request Method:POST 
Status Code:502 OK 

intestazioni di risposta:

alt-svc:quic=":443"; ma=604800; v="30,29,28,27,26,25" 
alternate-protocol:443:quic,p=1 
content-length:1613 
content-type:text/html; charset=UTF-8 
date:Tue, 01 Dec 2015 06:18:36 GMT 
server:GFE/2.0 
status:502 

intestazioni di richiesta:

:authority:content.googleapis.com 
:method:POST 
:path:/batch 
:scheme:https 
accept:*/* 
accept-encoding:gzip, deflate 
accept-language:ru,en-US;q=0.8,en;q=0.6,de;q=0.4,pt;q=0.2,uk;q=0.2,it;q=0.2 
authorization:Bearer ya29.PQI-rcaU2_Pd7tq3XufXVWPfje4ioMzBLhvKOieYuFgs2MnxTyQvtJ0QDR7EiWnN5SOPlGo 
content-length:2291 
content-type:multipart/mixed; boundary=batch691088898561756483 
dnt:1 
origin:https://content.googleapis.com 
referer:https://content.googleapis.com/static/proxy.html?jsh=m%3B%2F_%2Fscs%2Fapps-static%2F_%2Fjs%2Fk%3Doz.gapi.en.Dm6zFqHZO9M.O%2Fm%3D__features__%2Fam%3DAQ%2Frt%3Dj%2Fd%3D1%2Ft%3Dzcms%2Frs%3DAGLTcCPQ-9iC9Y-vGIOJ-RoQCZkFL66QXw 
user-agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36 
x-chrome-uma-enabled:1 
x-client-data:CKW2yQEIqbbJAQjEtskBCPCIygEI/ZXKAQi8mMoB 
x-clientdetails:appVersion=5.0%20(Macintosh%3B%20Intel%20Mac%20OS%20X%2010_10_3)%20AppleWebKit%2F537.36%20(KHTML%2C%20like%20Gecko)%20Chrome%2F46.0.2490.86%20Safari%2F537.36&platform=MacIntel&userAgent=Mozilla%2F5.0%20(Macintosh%3B%20Intel%20Mac%20OS%20X%2010_10_3)%20AppleWebKit%2F537.36%20(KHTML%2C%20like%20Gecko)%20Chrome%2F46.0.2490.86%20Safari%2F537.36 
x-goog-encode-response-if-executable:base64 
x-javascript-user-agent:google-api-javascript-client/1.1.0-beta 
x-origin:http://app.local 
x-referer:http://app.local 

Richiesta payload:

--batch691088898561756483 
Content-Type: application/http 
Content-Transfer-Encoding: binary 
Content-ID: <0B28tlN6SgYRacHVwdEQ5b1RtZmc> 

PATCH /drive/v2/files/0B28tlN6SgYRacHVwdEQ5b1RtZmc?addParents=0B28tlN6SgYRaS2syM1VGWjllMnc 
X-JavaScript-User-Agent: google-api-javascript-client/0.1 
Authorization: Bearer ya29.PQI-rcaU2_Pd7tq3XufXVWPfje4ioMzBLhvKOieYuFgs2MnxTyQvtJ0QDR7EiWnN5SOPlGo 
X-ClientDetails: appVersion=5.0%20(Macintosh%3B%20Intel%20Mac%20OS%20X%2010_10_3)%20AppleWebKit%2F537.36%20(KHTML%2C%20like%20Gecko)%20Chrome%2F46.0.2490.86%20Safari%2F537.36&platform=MacIntel&userAgent=Mozilla%2F5.0%20(Macintosh%3B%20Intel%20Mac%20OS%20X%2010_10_3)%20AppleWebKit%2F537.36%20(KHTML%2C%20like%20Gecko)%20Chrome%2F46.0.2490.86%20Safari%2F537.36 

--batch691088898561756483 
Content-Type: application/http 
Content-Transfer-Encoding: binary 
Content-ID: <0B28tlN6SgYRadVFRV0lRQW1kVlE> 

PATCH /drive/v2/files/0B28tlN6SgYRadVFRV0lRQW1kVlE?addParents=0B28tlN6SgYRaS2syM1VGWjllMnc 
X-JavaScript-User-Agent: google-api-javascript-client/0.1 
Authorization: Bearer ya29.PQI-rcaU2_Pd7tq3XufXVWPfje4ioMzBLhvKOieYuFgs2MnxTyQvtJ0QDR7EiWnN5SOPlGo 
X-ClientDetails: appVersion=5.0%20(Macintosh%3B%20Intel%20Mac%20OS%20X%2010_10_3)%20AppleWebKit%2F537.36%20(KHTML%2C%20like%20Gecko)%20Chrome%2F46.0.2490.86%20Safari%2F537.36&platform=MacIntel&userAgent=Mozilla%2F5.0%20(Macintosh%3B%20Intel%20Mac%20OS%20X%2010_10_3)%20AppleWebKit%2F537.36%20(KHTML%2C%20like%20Gecko)%20Chrome%2F46.0.2490.86%20Safari%2F537.36 

--batch691088898561756483 
Content-Type: application/http 
Content-Transfer-Encoding: binary 
Content-ID: <0B28tlN6SgYRaLW1qYmxrZUV2S0E> 

PATCH /drive/v2/files/0B28tlN6SgYRaLW1qYmxrZUV2S0E?addParents=0B28tlN6SgYRaS2syM1VGWjllMnc 
X-JavaScript-User-Agent: google-api-javascript-client/0.1 
Authorization: Bearer ya29.PQI-rcaU2_Pd7tq3XufXVWPfje4ioMzBLhvKOieYuFgs2MnxTyQvtJ0QDR7EiWnN5SOPlGo 
X-ClientDetails: appVersion=5.0%20(Macintosh%3B%20Intel%20Mac%20OS%20X%2010_10_3)%20AppleWebKit%2F537.36%20(KHTML%2C%20like%20Gecko)%20Chrome%2F46.0.2490.86%20Safari%2F537.36&platform=MacIntel&userAgent=Mozilla%2F5.0%20(Macintosh%3B%20Intel%20Mac%20OS%20X%2010_10_3)%20AppleWebKit%2F537.36%20(KHTML%2C%20like%20Gecko)%20Chrome%2F46.0.2490.86%20Safari%2F537.36 

--batch691088898561756483-- 
+0

Sì.Patchare un file alla volta funziona OK. –

+0

Anche eseguire files.insert in batch funziona OK, ma files.patch no. –

+0

Non patch permessi, cerco i genitori. –

risposta

0

Questo problema è risolto in Google Drive API v3. I batch funzionano correttamente.

1

provare a cambiare l'URL https://www.googleapis.com/batch invece di https://content.googleapis.com/batch

Utilizzando la vostra richiesta precisa e dati, ma cambiando l'URL che ho ricevuto un 200 con un errore di autenticazione per ogni richiesta, come previsto per i vecchi gettoni.

HTTP/1.1 200 OK 
Vary: Origin 
Vary: X-Origin 
Content-Type: multipart/mixed; boundary=batch_NP9EsgqJk5k_AAFjWZ0MHaM 
Date: Thu, 03 Dec 2015 13:52:18 GMT 
Expires: Thu, 03 Dec 2015 13:52:18 GMT 
Cache-Control: private, max-age=0 
X-Content-Type-Options: nosniff 
X-Frame-Options: SAMEORIGIN 
X-XSS-Protection: 1; mode=block 
Server: GSE 
Alternate-Protocol: 443:quic,p=1 
Alt-Svc: quic=":443"; ma=604800; v="30,29,28,27,26,25" 
Content-Length: 2027 

--batch_NP9EsgqJk5k_AAFjWZ0MHaM 
Content-Type: application/http 
Content-ID: <response-0B28tlN6SgYRacHVwdEQ5b1RtZmc> 

HTTP/1.1 401 Unauthorized 
WWW-Authenticate: Bearer realm="https://accounts.google.com/", error=invalid_token 
Content-Type: application/json; charset=UTF-8 
Date: Thu, 03 Dec 2015 13:52:18 GMT 
Expires: Thu, 03 Dec 2015 13:52:18 GMT 
Cache-Control: private, max-age=0 
Content-Length: 249 

{ 
"error": { 
    "errors": [ 
    { 
    "domain": "global", 
    "reason": "authError", 
    "message": "Invalid Credentials", 
    "locationType": "header", 
    "location": "Authorization" 
    } 
    ], 
    "code": 401, 
    "message": "Invalid Credentials" 
} 
} 

--batch_NP9EsgqJk5k_AAFjWZ0MHaM 
Content-Type: application/http 
Content-ID: <response-0B28tlN6SgYRadVFRV0lRQW1kVlE> 

HTTP/1.1 401 Unauthorized 
WWW-Authenticate: Bearer realm="https://accounts.google.com/", error=invalid_token 
Content-Type: application/json; charset=UTF-8 
Date: Thu, 03 Dec 2015 13:52:18 GMT 
Expires: Thu, 03 Dec 2015 13:52:18 GMT 
Cache-Control: private, max-age=0 
Content-Length: 249 

{ 
"error": { 
    "errors": [ 
    { 
    "domain": "global", 
    "reason": "authError", 
    "message": "Invalid Credentials", 
    "locationType": "header", 
    "location": "Authorization" 
    } 
    ], 
    "code": 401, 
    "message": "Invalid Credentials" 
} 
} 

--batch_NP9EsgqJk5k_AAFjWZ0MHaM 
Content-Type: application/http 
Content-ID: <response-0B28tlN6SgYRaLW1qYmxrZUV2S0E> 

HTTP/1.1 401 Unauthorized 
WWW-Authenticate: Bearer realm="https://accounts.google.com/", error=invalid_token 
Content-Type: application/json; charset=UTF-8 
Date: Thu, 03 Dec 2015 13:52:18 GMT 
Expires: Thu, 03 Dec 2015 13:52:18 GMT 
Cache-Control: private, max-age=0 
Content-Length: 249 

{ 
"error": { 
    "errors": [ 
    { 
    "domain": "global", 
    "reason": "authError", 
    "message": "Invalid Credentials", 
    "locationType": "header", 
    "location": "Authorization" 
    } 
    ], 
    "code": 401, 
    "message": "Invalid Credentials" 
} 
} 

--batch_NP9EsgqJk5k_AAFjWZ0MHaM-- 
+0

Im usando js gapi library e ho un wrapper di alto livello, quindi non posso cambiare l'url. Sto creando un batch come questo gapi.client.newHttpBatch(). –

0

L'API batch di Google è scarsamente documentata. Ecco alcune idee da provare:

  1. Si può utilizzare l'endpoint sbagliato (https://content.googleapis.com/batch invece di https://www.googleapis.com/batch), come Brian ha già suggerito. So per esperienza che non è possibile raggruppare richieste per nomi host diversi, anche se si fornisce l'intestazione Host: corretta all'interno di ciascuna richiesta batch.

  2. Sembra che tu stia inviando la richiesta batch da un browser Chrome e sta utilizzando SPDY o HTTP/2 per inviare la richiesta. Cosa succede se si utilizza uno strumento della riga di comando come curl per inviare la richiesta utilizzando HTTP/1.1?

  3. Qual è l'esatta risposta all'errore? Sembra che tu stia ricevendo una risposta 502 Bad Gateway con un corpo di risposta text/html, che è molto strano. Il comportamento previsto sarebbe una risposta 200 OK con un corpo di risposta multipart/mixed contenente un messaggio application/http per ciascuna singola richiesta inoltrata.

  4. Nessuna delle richieste PATCH nel gruppo ha un corpo, che potrebbe essere un problema. Dal momento che tutto quello che stai cercando di fare è aggiungere una nuova cartella genitore a ciascun file, cosa succede se invece provi a fare richieste POST https://www.googleapis.com/drive/v2/files/{fileId}/parents nel tuo batch?

Se siete in cerca di una risposta da Google, si può provare a inviare un bug sul official Google Apps API issue tracker. Non c'è alcuna garanzia che il team di Google Drive risponda, tuttavia, e ho visto spesso bug validi e riproducibili che rimangono non riconosciuti per mesi alla volta.

Problemi correlati