2015-12-01 4 views
5

Я пытаюсь добавить новую родительскую папку в большое количество моих файлов Google Диска. Я использую пакетные запросы, чтобы избежать отправки слишком большого количества запросов, но это не работает, если к пакету добавлено несколько запросов PATCH. Сервер Google возвращает ответ об ошибке HTTP 502 Bad Gateway. Что не так или как я могу это решить?Почему мой запрос API Диска завершается с ошибкой, когда в пакете содержится более одного запроса PATCH?

Общие:

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

заголовки отклика:

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 

заголовков запроса:

: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 

Запрос полезной нагрузки:

--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

Да.Исправление одного файла за один раз работает нормально. –

+0

Также запускайте файлы .insert в пакетных файлах OK, но files.patch нет. –

+0

Я не исправляю разрешения, я исправляю родителей. –

ответ

0

Эта проблема решена в Google Диске API v3. Партии работают нормально.

1

Попробуйте изменить URL, чтобы https://www.googleapis.com/batch вместо https://content.googleapis.com/batch

Использование точного запроса и данные, но изменения URL я получил 200 с ошибкой проверки подлинности для каждого запроса, как и ожидалось для старых токенов.

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 использует библиотеку js gapi и имеет обертку высокого уровня, поэтому я не могу изменить url. Я создаю пакет, как этот gapi.client.newHttpBatch(). –

0

Пакетный API Google плохо документирован. Вот несколько идей, чтобы попробовать:

  1. Вы можете использовать неправильную конечную точку (https://content.googleapis.com/batch вместо https://www.googleapis.com/batch), а Брайан уже предложил. Я знаю по опыту, что вы не можете комбинировать запросы для разных имен хостов, даже если вы указываете правильный заголовок Host: внутри каждого из пакетных запросов.

  2. Похоже, вы отправляете пакетный запрос из браузера Chrome, и он использует SPDY или HTTP/2 для отправки запроса. Что произойдет, если вы используете инструмент командной строки, например curl, чтобы отправить запрос, используя HTTP/1.1?

  3. Каков точный ответ об ошибке? Похоже, вы получаете ответ 502 Bad Gateway с телом ответа text/html, что очень странно. Ожидаемое поведение было бы ответом 200 OK с блоком ответа multipart/mixed, содержащим сообщение application/http для каждого из ваших индивидуальных запросов.

  4. Ни один из PATCH запросов в вашей партии не имеет корпуса, что может быть проблемой. Поскольку все, что вы пытаетесь сделать, это добавить новую родительскую папку в каждый файл, что произойдет, если вместо этого попробуйте сделать POST https://www.googleapis.com/drive/v2/files/{fileId}/parents запросов в вашей партии?

Если вы ищете ответ от Google, вы можете попробовать подав ошибку на official Google Apps API issue tracker. Однако нет никакой гарантии, что команда Google Drive ответит, и я часто видел, что действительные и воспроизводимые ошибки остаются неподтвержденными в течение нескольких месяцев.

 Смежные вопросы

  • Нет связанных вопросов^_^