Параметры запроса не читаются при вызове Google Cloud Printing API

Я пытаюсь использовать API Google Cloud Printing. Раньше у меня были проблемы с отправкой моего запроса. После некоторых экспериментов с json / stringifying я больше не получаю эту ошибку. Вместо этого мои вызовы API неуспешны в соответствии с ответом, отправленным API Google. Вот что я делаю:

// Ticket used for google cloud printing
const ticket = {
  "version":"1.0",
   "print":{
      "color":{"vendor_id":"psk:Color","type":0},
      "duplex":{"type":0},
      "page_orientation":{"type":0},
      "copies":{"copies":1},
      "dpi":{"horizontal_dpi":1200,"vertical_dpi":1200},
      "media_size":{"width_microns":80000,"height_microns":58000,"is_continuous_feed":false},
      "collate":{"collate":true},
      "vendor_ticket_item":[
          //Printer specific settings here, from the capabilities:
          {"id":"psk:JobInputBin","value":"ns0000:Tray3"},
          {"id":"psk:PageICMRenderingIntent","value":"psk:Photographs"},
          {"id":"psk:PageMediaType","value":"ns0000:Auto"},
          {"id":"psk:JobOutputBin","value":"ns0000:Auto"},
          //etc.
      ]
    }
  }

request({
  "method": "POST",
  "content-type" : "application/json",
  "url": googlePrintUrl + "submit",
  "headers": {
    "Authorization": "OAuth " + googleAccessToken
  },
  "body" : {
    "printerid": "39875g133-ae7d-76hg-65af-jhe5bc682404",
    "ticket": JSON.stringify(ticket),
    "title": "TEST PRINT",
    "content": "test msg",
    "contentType": "text/plain"
  },
  "json": true
}, function (error, res, body){
  if (error) {
    console.info("There was an error with Google Cloud Print");
    console.info(error);
    return;
  }
  console.info("The server responded with:", body);
}); 

этот запрос приводит к следующему ответу от сервера:

The server responded with: { success: false,
  request: 
   { time: '0',
     params: {},
     user: '[email protected]',
     users: [ '[email protected]' ] },
  errorCode: 3,
  message: 'Printer Id required for this request.' }

Как видите, поле params пустое. Это странно, потому что, когда я использую Postman для выполнения того же запроса, это поле заполняется параметрами, которые я отправил в вызове API. Вот как я успешно сделал это в Postman:

Параметры запроса не читаются при вызове Google Cloud Printing APIПараметры запроса не читаются при вызове Google Cloud Printing API

Что сгенерировало ответ сервера:

{
 "success": true,
 "request": {
  "time": "0",
  "params": {
   "ticket": [
    "{\"version\":\"1.0\",\"print\":{\"color\":{\"vendor_id\":\"psk:Color\",\"type\":0},\"duplex\":{\"type\":0},\"page_orientation\":{\"type\":0},\"copies\":{\"copies\":1},\"dpi\":{\"horizontal_dpi\":600,\"vertical_dpi\":600},\"media_size\":{\"width_microns\":80000,\"height_microns\":58000,\"is_continuous_feed\":false},\"collate\":{\"collate\":true},\"vendor_ticket_item\":[{\"id\":\"psk:JobInputBin\",\"value\":\"ns0000:Tray3\"},{\"id\":\"psk:PageICMRenderingIntent\",\"value\":\"psk:Photographs\"},{\"id\":\"psk:PageMediaType\",\"value\":\"ns0000:Auto\"},{\"id\":\"psk:JobOutputBin\",\"value\":\"ns0000:Auto\"}]}}"
   ],
   "printerid": [
    "39875g133-ae7d-76hg-65af-jhe5bc682404"
   ],
   "title": [
    "TEST"
   ],
   "contentType": [
    "text/plain"
   ],
   "content": [
    "**** test"
   ]
  },
  "user": "[email protected]",
  "users": [
   "[email protected]"
  ]
 },
 "xsrf_token": "AIp06DhAZRSLW9GlHWQLKykbpU-5fYRqcA:1531484990909",
 "message": "Print job added.",
 "job": {
  "ticketUrl": "https://www.google.com/cloudprint/ticket?jobid\u003df11043fe-3e00-d912-11dd-c859718a5575",
  "printerName": "",
  "errorCode": "",
  "updateTime": "1531484993830",
  "title": "**** TEST",
  "message": "",
  "ownerId": "[email protected]",
  "tags": [
   "^own"
  ],
  "uiState": {
   "summary": "QUEUED",
   "progress": "Delivery attempts: 1"
  },
  "numberOfPages": 1,
  "createTime": "1531484991068",
  "semanticState": {
   "delivery_attempts": 1,
   "state": {
    "type": "QUEUED"
   },
   "version": "1.0"
  },
  "printerid": "39875g133-ae7d-76hg-65af-jhe5bc682404",
  "fileUrl": "https://www.google.com/cloudprint/download?id\u003df11043fe-3e00-d912-11dd-c859718a5575",
  "id": "f11043fe-3e00-d912-11dd-c859718a5575",
  "rasterUrl": "https://www.google.com/cloudprint/download?id\u003df11043fe-3e00-d912-11dd-c859718a5575\u0026forcepwg\u003d1",
  "contentType": "application/pdf",
  "status": "QUEUED"
 }
}

Это успешное задание на печать, и все параметры, отправленные мной, отправляются обратно в объекте ответа.

Итак, где я ошибаюсь в своем коде node.js?

Привет, Саханд, у тебя есть решение этой проблемы?

Suresh 26.11.2018 06:05

Я уже точно не помню, но предполагаю, что я делал что-то не так в моем коде node.js.

Sahand 26.11.2018 13:57
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
230
1

Ответы 1

Почтальон отправляет полезную нагрузку (идентификатор принтера, контент, заголовок и т. д.) В formData, а не в body

Под кнопкой «ОТПРАВИТЬ» находится кнопка «Код», с помощью которой можно создавать функциональные фрагменты кода NodeJS (и другие), например

var request = require("request");

var options = { method: 'POST',
  url: 'https://www.google.com/cloudprint/submit',
  headers: 
   { 'cache-control': 'no-cache',
     Connection: 'keep-alive',
     'Content-Length': '769',
     'Accept-Encoding': 'gzip, deflate',
     Host: 'www.google.com',
     'Cache-Control': 'no-cache',
     'Content-Type': 'application/json',
     Authorization: 'Bearer ya29.GlxWB5_vr8QmJw3DChvVyqpRhNJ2hsuVzwNTJoYRH6r2VVGTwDE3MLNAN8pjTB3-BDWtZeIDrCDcP5DwYGywM1vgb9VMPhoi806HrMpOpKAaKzrgiliojec6IB2Cwg',
     'content-type': 'multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' },
  formData: 
   { printerid: 'd936d368-7ea4-6f66-84fd-6d5a7a357318',
     title: 'Document Title',
     content: 'Hello World',
     ticket: '{"version":"1.0","print":{"vendor_ticket_item":[],"color":{"type":"STANDARD_MONOCHROME"},"copies":{"copies":1}}}',
     contentType: 'text/plain' } };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.info(body);
});

Другие вопросы по теме