Why doesn't an API Drive request work if a package contains more than one PATCH request?

Iโ€™m trying to add a new parent folder to a large number of my Google Drive files. I use batch requests to avoid sending too many requests, but this does not work if multiple PATCH requests are added to the package. The Google server returns an HTTP 502 Bad Gateway error response. What is wrong or how can I solve it?

General:

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

Answer headers:

 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 

Request Headers:

 :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 

Payload Request:

 --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-- 
+5
source share
3 answers

This issue has been resolved in Google Drive API v3. Parties are working fine.

0
source

Try changing the URL to https://www.googleapis.com/batch instead of https://content.googleapis.com/batch

Using your exact request and data, but changing the URL, I got 200 with an authentication error for each request, as expected for old tokens.

 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-- 
+1
source

The Google Batch Documentation API is poorly documented. Here are some ideas to try:

  • You might be using the wrong endpoint ( https://content.googleapis.com/batch instead of https://www.googleapis.com/batch ), as Brian already suggested. I know from experience that you cannot combine requests for different host names, even if you specify the correct Host: header inside each of the batch requests.

  • It looks like you are sending a batch request from a Chrome browser, and it uses SPDY or HTTP / 2 to send the request. What happens if you use a command line tool like curl to send a request using HTTP / 1.1 instead?

  • What is the exact error response? It looks like you get a 502 Bad Gateway response with the response body text/html , which is very strange. The expected behavior will be a 200 OK response with a multipart/mixed response body containing the application/http message for each of your individual requests.

  • None of the PATCH requests in your batch have a body, which can be a problem. Since all you are trying to do is add a new parent folder to each file, what will happen if instead try POST https://www.googleapis.com/drive/v2/files/{fileId}/parents requests in your party?

If you're looking for an answer from Google, you can try sending an error message about the official tracker for the Google Apps API . However, there is no guarantee that the Google Drive team will respond, and I often saw that valid and reproducible errors remain unconfirmed for several months at a time.

0
source

Source: https://habr.com/ru/post/1237152/


All Articles