2016-11-24 18 views
1
var request = require('request'); 



        username = "", 
        password = "", 
        url = "http://207.188.73.88:8000/sap/opu/odata/sap/ZTEE_TIME_SRV/ZTEERESERVESet(Time=time'PT11H00M00S',Date=datetime'2014-03-11T00%3A00%3A00',Location='TAJ',Number=3)", 
        auth = "Basic " + new Buffer(username + ":" + password).toString("base64"); 

я пытаюсь опубликовать данные OData службы, но проблема в том, что я не мог получить действительный маркер от ПОЛУЧИТЬ службы, чтобы использовать его в методе пост я нахожусь первый отправить метод GETпроверки CSRF маркер не удалось в nodejs при размещении данных в OData службы

     request(
          { 
           url : url, 

           headers : { 
            "Authorization" : auth, 
            'x-csrf-token':'Fetch' 

           } 

          }, 
          function (error, response, body) { 
             // console.log("JSON data " + response); 
             // console.log("body" + body); 

пытается получить маркер для использования в пост // console.log (response.headers);

         request(
          { 
           url : url, 

           headers : { 

здесь говорит Недопустимый маркер

       "Authorization" : auth, 
           "X-CSRF-TOKEN":"u6piLO58XoK6udOkQ5Naww==" 

           }, 
         method: 'POST', 
         //Lets post the following key/values as form 
          form: { 
            Time:'PT11H00M00S', 

            Date:'2014-03-11T00%3A00%3A00', 
            Location:'TAJ', 
            Number:3 , 
             } 

          }, 
          function (error, response, body) { 
            console.log(body);  
           } 




         ); 
           } 


         ); 
+0

ли вы найти решение для этого? – Mikel

+0

Нет, я не получил решение извините за поздний ответ @mikel – subhan

+0

Не беспокойтесь, я нашел его, проверьте ответ. – Mikel

ответ

0

Я получил решение.

Я пытался сделать это с помощью POSTMAN, и он отлично работал. Дело в том, что когда я просил токен CSRF, он всегда давал мне ту же самую спину. Но когда я пытался с узлом, каждый раз был другим. Тогда я понял, что файл cookie отсутствует.

И все это решение состоит в том, чтобы отправить cookie по меньшей мере в POST запросах.

set-cookie из "Fetch" запроса должен быть отправлен в Post запроса в Cookiex-csrf-token рядом с

я положил пример в машинописи, но в JS не изменяет так много, идея та же.

пример не лучший случай, но полный, чтобы выяснить, как она работает

let headers = { 
    "Authorization": "Basic " + new Buffer(username + ":" + password).toString("base64"), 
    "Content-Type":"application/json", 
    "Accept":"application/json", 
    "x-csrf-token":"Fetch" // get CSRF Token for post or update 
}; 
// if you are using session vars 
if (req.session.headers && req.session.headers.cookie) { 
    headers['Cookie'] = req.session.headers.cookie; 
} else { 
    req.session.headers = {}; // initialize as object 
} 
let opts = { 
    url: "https://{host}:{port}/sap/opu/odata/sap/MD_SUPPLIER_MASTER_SRV", 
    qs: params1, // params set before, not set in the example 
    headers: headers, 
    json: true, 
} 
request(opts, (error: any, response: any, body: any): any => { 
    if (!error && response.statusCode === 200) { 
    if (response.headers["set-cookie"]) { 
     req.session.headers.cookie = response.headers["set-cookie"]; // store Cookie in session 
     headers['Cookie'] = req.session.headers.cookie; // set in headers for the next call. I guess this is the part you missed 
    } 
    if (response.headers['x-csrf-token']) { 
     req.session.headers.csrf = response.headers['x-csrf-token']; // store csrf-token in session 
     headers['x-csrf-token'] = req.session.headers.csrf; // set in headers for the next call 
    } 

    let options: request.Options = { 
     url: "https://{host}:{port}/sap/opu/odata/sap/MD_SUPPLIER_MASTER_SRV/C_BusinessPartnerSupplierEdit", 
     method: 'POST', 
     headers: headers, 
     qs: params2, // params set before 
     json: true, 
    } 
    request(options, (error: any, response: any, body: any): any => { 
     res.json(body); 
    }); 
    } 
}); 

С уважением

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

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